Parcourir la source

Merge pull request #241 from gempesaw/update-firefox43-xpi

Fix #238: update firefox binary files to v2.48.2
Daniel Gempesaw il y a 10 ans
Parent
commit
13f48199f7

+ 2 - 0
Changes

@@ -1,8 +1,10 @@
 Revision history for Selenium-Remote-Driver
 
 0.2701 01-07-2015
+        (firefox driver version: 2.48.2)
         [BUG FIXES]
         - #239: Respect existing prefs when using custom profile with Selenium::Firefox
+        - #238: Update firefox driver extension to latest 2.48.2
 
 0.27   08-30-2015
         [NEW FEATURES]

+ 1 - 1
cpanfile

@@ -15,7 +15,7 @@ requires "HTTP::Response" => "0";
 requires "IO::Socket" => "0";
 requires "IO::Socket::INET" => "0";
 requires "IO::String" => "0";
-requires "IO::Uncompress::Unzip" => "0";
+requires "IO::Uncompress::Unzip" => "2.030";
 requires "JSON" => "0";
 requires "LWP::UserAgent" => "0";
 requires "List::MoreUtils" => "0";

+ 5 - 0
lib/Selenium/Firefox.pm

@@ -79,6 +79,11 @@ has '_binary_args' => (
     }
 );
 
+has '+wd_context_prefix' => (
+    is => 'ro',
+    default => sub { '/hub' }
+);
+
 with 'Selenium::CanStartBinary';
 
 =attr startup_timeout

+ 25 - 7
lib/Selenium/Firefox/Profile.pm

@@ -12,8 +12,8 @@ use Cwd qw(abs_path);
 use File::Copy qw(copy);
 use File::Temp;
 use File::Basename qw(dirname);
-use IO::Uncompress::Unzip qw(unzip $UnzipError);
-use JSON qw/decode_json/;
+use IO::Uncompress::Unzip 2.030 qw($UnzipError);
+use JSON qw(decode_json);
 use MIME::Base64;
 use Scalar::Util qw(blessed looks_like_number);
 use XML::Simple;
@@ -265,11 +265,8 @@ sub _install_extensions {
         # its id, which is found in the install.rdf in the root of the
         # zip.
 
-        my $fh;
-        unzip $xpi => \$fh, Name => "install.rdf"
-          or die "unzip failed: $UnzipError\n";
-
-        my $rdf = XMLin($fh);
+        my $rdf_string = $self->_extract_install_rdf($xpi);
+        my $rdf = XMLin($rdf_string);
         my $name = $rdf->{Description}->{'em:id'};
 
         my $xpi_dest = $extension_dir . $name . ".xpi";
@@ -278,6 +275,27 @@ sub _install_extensions {
     }
 }
 
+sub _extract_install_rdf {
+    my ($self, $xpi) = @_;
+
+    my $unzipped = IO::Uncompress::Unzip->new($xpi)
+      or die "Cannot unzip $xpi: $UnzipError";
+
+    my $install_rdf = '';
+    while ($unzipped->nextStream) {
+        my $filename = $unzipped->getHeaderInfo->{Name};
+        if ($filename eq 'install.rdf') {
+            my $buffer;
+            while ((my $status = $unzipped->read($buffer)) > 0) {
+                $install_rdf .= $buffer;
+            }
+            return $install_rdf;
+        }
+    }
+
+    croak 'Invalid Firefox extension: could not find install.rdf in the .XPI at: ' . $xpi
+}
+
 1;
 
 __END__

BIN
lib/Selenium/Firefox/webdriver.xpi


+ 6 - 1
lib/Selenium/Firefox/webdriver_prefs.json

@@ -2,15 +2,18 @@
   "frozen": {
     "app.update.auto": false,
     "app.update.enabled": false,
+    "browser.displayedE10SNotice": 4,
     "browser.download.manager.showWhenStarting": false,
     "browser.EULA.override": true,
     "browser.EULA.3.accepted": true,
     "browser.link.open_external": 2,
     "browser.link.open_newwindow": 2,
     "browser.offline": false,
+    "browser.reader.detectedFirstArticle": true,
     "browser.safebrowsing.enabled": false,
     "browser.safebrowsing.malware.enabled": false,
     "browser.search.update": false,
+    "browser.selfsupport.url" : "",
     "browser.sessionstore.resume_from_crash": false,
     "browser.shell.checkDefaultBrowser": false,
     "browser.tabs.warnOnClose": false,
@@ -28,6 +31,7 @@
     "extensions.logging.enabled": true,
     "extensions.update.enabled": false,
     "extensions.update.notifyUser": false,
+    "javascript.enabled": true,
     "network.manage-offline-status": false,
     "network.http.phishy-userpass-length": 255,
     "offline-apps.allow_by_default": true,
@@ -48,7 +52,8 @@
     "toolkit.networkmanager.disable": true,
     "toolkit.telemetry.prompted": 2,
     "toolkit.telemetry.enabled": false,
-    "toolkit.telemetry.rejected": true
+    "toolkit.telemetry.rejected": true,
+    "xpinstall.signatures.required": false
   },
   "mutable": {
     "browser.dom.window.dump.enabled": true,

+ 12 - 6
lib/Selenium/Remote/Driver.pm

@@ -382,15 +382,21 @@ has 'session_id' => (
 has 'remote_conn' => (
     is      => 'lazy',
     builder => sub {
-            my $self = shift;
-            return Selenium::Remote::RemoteConnection->new(
-                remote_server_addr => $self->remote_server_addr,
-                port               => $self->port,
-                ua                 => $self->ua
-            );
+        my $self = shift;
+        return Selenium::Remote::RemoteConnection->new(
+            remote_server_addr => $self->remote_server_addr,
+            port               => $self->port,
+            ua                 => $self->ua,
+            wd_context_prefix  => $self->wd_context_prefix
+        );
     },
 );
 
+has 'wd_context_prefix' => (
+    is => 'lazy',
+    default => sub { '/wd/hub' }
+);
+
 has 'error_handler' => (
     is => 'rw',
     coerce => sub {

+ 7 - 5
lib/Selenium/Remote/RemoteConnection.pm

@@ -36,11 +36,15 @@ has 'error_handler' => (
     builder => sub { return Selenium::Remote::ErrorHandler->new; }
 );
 
-
+has 'wd_context_prefix' => (
+    is => 'lazy',
+    default => sub { '/wd/hub' }
+);
 
 sub check_status {
     my $self = shift;
     my $status;
+
     try {
         $status = $self->request({method => 'GET', url => 'status'});
     }
@@ -59,9 +63,6 @@ sub check_status {
     }
 }
 
-
-
-# This request method is tailored for Selenium RC server
 sub request {
     my ($self,$resource,$params,$dont_process_response) = @_;
     my $method =        $resource->{method};
@@ -87,7 +88,8 @@ sub request {
             "http://"
           . $self->remote_server_addr . ":"
           . $self->port
-          . "/wd/hub/$url";
+          . $self->wd_context_prefix
+          . "/$url";
     }
 
     if ((defined $params) && $params ne '') {