selenium-webdriver 2.42.0 → 2.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES CHANGED
@@ -1,3 +1,14 @@
1
+ 2.43.0 (2014-09-09)
2
+ ===================
3
+
4
+ * Make sure UnhandledAlertErrors includes the alert text if provided by the driver.
5
+ * Firefox
6
+ - Make sure the browser process is properly killed if silent startup hangs (#7392)
7
+ - native events support for Firefox 24, 31 and 32
8
+ * Loosen websocket dependency to ~> 1.0
9
+ * Add support for `switch_to.parent_frame` (thanks abotalov)
10
+ * Fix download location for Selenium::Server.{latest,get} (#7049 - thanks marekj)
11
+
1
12
  2.42.0 (2014-05-23)
2
13
  ===================
3
14
 
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -57,8 +57,8 @@ module Selenium
57
57
 
58
58
  begin
59
59
  open(download_file_name, "wb") do |destination|
60
- net_http.start("selenium.googlecode.com") do |http|
61
- resp = http.request_get("/files/#{download_file_name}") do |response|
60
+ net_http.start("selenium-release.storage.googleapis.com") do |http|
61
+ resp = http.request_get("/#{required_version[/(\d+\.\d+)\./, 1]}/#{download_file_name}") do |response|
62
62
  total = response.content_length
63
63
  progress = 0
64
64
  segment_count = 0
@@ -95,9 +95,11 @@ module Selenium
95
95
  #
96
96
 
97
97
  def self.latest
98
- net_http.start("code.google.com") do |http|
99
- resp = http.get("/p/selenium/downloads/list")
100
- resp.body.to_s[/selenium-server-standalone-(\d+.\d+.\d+).jar/, 1]
98
+ require 'rexml/document'
99
+ net_http.start("selenium-release.storage.googleapis.com") do |http|
100
+ REXML::Document.new(http.get("/").body).root.get_elements("//Contents/Key").map { |e|
101
+ e.text[/selenium-server-standalone-(\d+\.\d+\.\d+)\.jar/, 1]
102
+ }.compact.max
101
103
  end
102
104
  end
103
105
 
@@ -18,6 +18,14 @@ module Selenium
18
18
  @bridge.switchToFrame id
19
19
  end
20
20
 
21
+ #
22
+ # switch to the parent frame
23
+ #
24
+
25
+ def parent_frame
26
+ @bridge.switchToParentFrame
27
+ end
28
+
21
29
  #
22
30
  # switch to the given window handle
23
31
  #
@@ -44,7 +44,14 @@ module Selenium
44
44
  end
45
45
 
46
46
  def wait
47
- @process.poll_for_exit(WAIT_TIMEOUT) if @process
47
+ return unless @process
48
+
49
+ begin
50
+ @process.poll_for_exit(WAIT_TIMEOUT)
51
+ rescue ChildProcess::TimeoutError => e
52
+ @process.stop
53
+ raise e
54
+ end
48
55
  end
49
56
 
50
57
  private
@@ -22,7 +22,6 @@
22
22
  "extensions.logging.enabled": true,
23
23
  "extensions.update.enabled": false,
24
24
  "extensions.update.notifyUser": false,
25
- "layout.css.devPixelsPerPx": "1.0",
26
25
  "network.manage-offline-status": false,
27
26
  "network.http.phishy-userpass-length": 255,
28
27
  "offline-apps.allow_by_default": true,
@@ -190,6 +190,10 @@ module Selenium
190
190
  execute :switchToFrame, {}, :id => id
191
191
  end
192
192
 
193
+ def switchToParentFrame
194
+ execute :switchToParentFrame
195
+ end
196
+
193
197
  def switchToDefaultContent
194
198
  execute :switchToFrame, {}, :id => nil
195
199
  end
@@ -65,6 +65,7 @@ class Selenium::WebDriver::Remote::Bridge
65
65
  #
66
66
 
67
67
  command :switchToFrame, :post, "session/:session_id/frame"
68
+ command :switchToParentFrame, :post, "session/:session_id/frame/parent"
68
69
  command :switchToWindow, :post, "session/:session_id/window"
69
70
 
70
71
  #
@@ -31,6 +31,7 @@ module Selenium
31
31
  case val
32
32
  when Hash
33
33
  msg = val['message'] or return "unknown error"
34
+ msg << ": #{val['alert']['text'].inspect}" if val['alert'].kind_of?(Hash) && val['alert']['text']
34
35
  msg << " (#{ val['class'] })" if val['class']
35
36
  when String
36
37
  msg = val
@@ -32,16 +32,44 @@ goog.provide = function(a) {
32
32
  }
33
33
  goog.exportPath_(a);
34
34
  };
35
+ goog.module = function(a) {
36
+ if (!goog.isString(a) || !a) {
37
+ throw Error("Invalid module identifier");
38
+ }
39
+ if (!goog.isInModuleLoader_()) {
40
+ throw Error("Module " + a + " has been loaded incorrectly.");
41
+ }
42
+ if (goog.moduleLoaderState_.moduleName) {
43
+ throw Error("goog.module may only be called once per module.");
44
+ }
45
+ goog.moduleLoaderState_.moduleName = a;
46
+ if (!COMPILED) {
47
+ if (goog.isProvided_(a)) {
48
+ throw Error('Namespace "' + a + '" already declared.');
49
+ }
50
+ delete goog.implicitNamespaces_[a];
51
+ }
52
+ };
53
+ goog.moduleLoaderState_ = null;
54
+ goog.isInModuleLoader_ = function() {
55
+ return null != goog.moduleLoaderState_;
56
+ };
57
+ goog.module.exportTestMethods = function() {
58
+ if (!goog.isInModuleLoader_()) {
59
+ throw Error("goog.module.exportTestMethods must be called from within a goog.module");
60
+ }
61
+ goog.moduleLoaderState_.exportTestMethods = !0;
62
+ };
35
63
  goog.setTestOnly = function(a) {
36
64
  if (COMPILED && !goog.DEBUG) {
37
- throw a = a || "", Error("Importing test-only code into non-debug environment" + a ? ": " + a : ".");
65
+ throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : "."));
38
66
  }
39
67
  };
40
68
  goog.forwardDeclare = function(a) {
41
69
  };
42
70
  COMPILED || (goog.isProvided_ = function(a) {
43
- return!goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a));
44
- }, goog.implicitNamespaces_ = {});
71
+ return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a));
72
+ }, goog.implicitNamespaces_ = {"goog.module":!0});
45
73
  goog.getObjectByName = function(a, b) {
46
74
  for (var c = a.split("."), d = b || goog.global, e;e = c.shift();) {
47
75
  if (goog.isDefAndNotNull(d[e])) {
@@ -58,31 +86,35 @@ goog.globalize = function(a, b) {
58
86
  c[d] = a[d];
59
87
  }
60
88
  };
61
- goog.addDependency = function(a, b, c) {
89
+ goog.addDependency = function(a, b, c, d) {
62
90
  if (goog.DEPENDENCIES_ENABLED) {
63
- var d;
91
+ var e;
64
92
  a = a.replace(/\\/g, "/");
65
- for (var e = goog.dependencies_, f = 0;d = b[f];f++) {
66
- e.nameToPath[d] = a, a in e.pathToNames || (e.pathToNames[a] = {}), e.pathToNames[a][d] = !0;
93
+ for (var f = goog.dependencies_, g = 0;e = b[g];g++) {
94
+ f.nameToPath[e] = a, f.pathIsModule[a] = !!d;
67
95
  }
68
96
  for (d = 0;b = c[d];d++) {
69
- a in e.requires || (e.requires[a] = {}), e.requires[a][b] = !0;
97
+ a in f.requires || (f.requires[a] = {}), f.requires[a][b] = !0;
70
98
  }
71
99
  }
72
100
  };
73
101
  goog.ENABLE_DEBUG_LOADER = !0;
102
+ goog.logToConsole_ = function(a) {
103
+ goog.global.console && goog.global.console.error(a);
104
+ };
74
105
  goog.require = function(a) {
75
- if (!COMPILED && !goog.isProvided_(a)) {
106
+ if (!COMPILED) {
107
+ if (goog.isProvided_(a)) {
108
+ return goog.isInModuleLoader_() ? a in goog.loadedModules_ ? goog.loadedModules_[a] : goog.getObjectByName(a) : null;
109
+ }
76
110
  if (goog.ENABLE_DEBUG_LOADER) {
77
111
  var b = goog.getPathFromDeps_(a);
78
112
  if (b) {
79
- goog.included_[b] = !0;
80
- goog.writeScripts_();
81
- return;
113
+ return goog.included_[b] = !0, goog.writeScripts_(), null;
82
114
  }
83
115
  }
84
116
  a = "goog.require could not find: " + a;
85
- goog.global.console && goog.global.console.error(a);
117
+ goog.logToConsole_(a);
86
118
  throw Error(a);
87
119
  }
88
120
  };
@@ -105,8 +137,10 @@ goog.addSingletonGetter = function(a) {
105
137
  };
106
138
  };
107
139
  goog.instantiatedSingletons_ = [];
140
+ goog.LOAD_MODULE_USING_EVAL = !0;
141
+ goog.loadedModules_ = {};
108
142
  goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
109
- goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}}, goog.inHtmlDocument_ = function() {
143
+ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}}, goog.inHtmlDocument_ = function() {
110
144
  var a = goog.global.document;
111
145
  return "undefined" != typeof a && "write" in a;
112
146
  }, goog.findBasePath_ = function() {
@@ -123,32 +157,93 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathToN
123
157
  }
124
158
  }
125
159
  }
126
- }, goog.importScript_ = function(a) {
127
- var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
128
- !goog.dependencies_.written[a] && b(a) && (goog.dependencies_.written[a] = !0);
129
- }, goog.writeScriptTag_ = function(a) {
160
+ }, goog.importScript_ = function(a, b) {
161
+ (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(a, b) && (goog.dependencies_.written[a] = !0);
162
+ }, goog.IS_OLD_IE_ = goog.global.document && goog.global.document.all && !goog.global.atob, goog.importModule_ = function(a) {
163
+ goog.importScript_("", 'goog.retrieveAndExecModule_("' + a + '");') && (goog.dependencies_.written[a] = !0);
164
+ }, goog.queuedModules_ = [], goog.retrieveAndExecModule_ = function(a) {
165
+ var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_, c = null, d = new goog.global.XMLHttpRequest;
166
+ d.onload = function() {
167
+ c = this.responseText;
168
+ };
169
+ d.open("get", a, !1);
170
+ d.send();
171
+ c = d.responseText;
172
+ if (null != c) {
173
+ d = goog.wrapModule_(a, c), goog.IS_OLD_IE_ ? goog.queuedModules_.push(d) : b(a, d), goog.dependencies_.written[a] = !0;
174
+ } else {
175
+ throw Error("load of " + a + "failed");
176
+ }
177
+ }, goog.wrapModule_ = function(a, b) {
178
+ return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(b + "\n//# sourceURL=" + a + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + b + "\n;return exports});\n//# sourceURL=" + a + "\n";
179
+ }, goog.loadQueuedModules_ = function() {
180
+ var a = goog.queuedModules_.length;
181
+ if (0 < a) {
182
+ var b = goog.queuedModules_;
183
+ goog.queuedModules_ = [];
184
+ for (var c = 0;c < a;c++) {
185
+ goog.globalEval(b[c]);
186
+ }
187
+ }
188
+ }, goog.loadModule = function(a) {
189
+ try {
190
+ goog.moduleLoaderState_ = {moduleName:void 0, exportTestMethods:!1};
191
+ var b;
192
+ if (goog.isFunction(a)) {
193
+ b = a.call(goog.global, {});
194
+ } else {
195
+ if (goog.isString(a)) {
196
+ b = goog.loadModuleFromSource_.call(goog.global, a);
197
+ } else {
198
+ throw Error("Invalid module definition");
199
+ }
200
+ }
201
+ Object.seal && Object.seal(b);
202
+ var c = goog.moduleLoaderState_.moduleName;
203
+ if (!goog.isString(c) || !c) {
204
+ throw Error('Invalid module name "' + c + '"');
205
+ }
206
+ goog.loadedModules_[c] = b;
207
+ if (goog.moduleLoaderState_.exportTestMethods) {
208
+ for (var d in b) {
209
+ if (0 === d.indexOf("test", 0) || "tearDown" == d || "setup" == d) {
210
+ goog.global[d] = b[d];
211
+ }
212
+ }
213
+ }
214
+ } finally {
215
+ goog.moduleLoaderState_ = null;
216
+ }
217
+ }, goog.loadModuleFromSource_ = function(a) {
218
+ eval(a);
219
+ return{};
220
+ }, goog.writeScriptTag_ = function(a, b) {
130
221
  if (goog.inHtmlDocument_()) {
131
- var b = goog.global.document;
132
- if ("complete" == b.readyState) {
222
+ var c = goog.global.document;
223
+ if ("complete" == c.readyState) {
133
224
  if (/\bdeps.js$/.test(a)) {
134
225
  return!1;
135
226
  }
136
227
  throw Error('Cannot write "' + a + '" after document load');
137
228
  }
138
- b.write('<script type="text/javascript" src="' + a + '">\x3c/script>');
229
+ var d = goog.IS_OLD_IE_;
230
+ void 0 === b ? d ? (d = " onreadystatechange='goog.onScriptLoad_(this, " + ++goog.lastNonModuleScriptIndex_ + ")' ", c.write('<script type="text/javascript" src="' + a + '"' + d + ">\x3c/script>")) : c.write('<script type="text/javascript" src="' + a + '">\x3c/script>') : c.write('<script type="text/javascript">' + b + "\x3c/script>");
139
231
  return!0;
140
232
  }
141
233
  return!1;
234
+ }, goog.lastNonModuleScriptIndex_ = 0, goog.onScriptLoad_ = function(a, b) {
235
+ "complete" == a.readyState && goog.lastNonModuleScriptIndex_ == b && goog.loadQueuedModules_();
236
+ return!0;
142
237
  }, goog.writeScripts_ = function() {
143
238
  function a(e) {
144
239
  if (!(e in d.written)) {
145
240
  if (!(e in d.visited) && (d.visited[e] = !0, e in d.requires)) {
146
- for (var g in d.requires[e]) {
147
- if (!goog.isProvided_(g)) {
148
- if (g in d.nameToPath) {
149
- a(d.nameToPath[g]);
241
+ for (var f in d.requires[e]) {
242
+ if (!goog.isProvided_(f)) {
243
+ if (f in d.nameToPath) {
244
+ a(d.nameToPath[f]);
150
245
  } else {
151
- throw Error("Undefined nameToPath for " + g);
246
+ throw Error("Undefined nameToPath for " + f);
152
247
  }
153
248
  }
154
249
  }
@@ -160,13 +255,19 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathToN
160
255
  for (e in goog.included_) {
161
256
  d.written[e] || a(e);
162
257
  }
163
- for (e = 0;e < b.length;e++) {
164
- if (b[e]) {
165
- goog.importScript_(goog.basePath + b[e]);
258
+ for (var f = 0;f < b.length;f++) {
259
+ e = b[f], goog.dependencies_.written[e] = !0;
260
+ }
261
+ var g = goog.moduleLoaderState_;
262
+ goog.moduleLoaderState_ = null;
263
+ for (f = 0;f < b.length;f++) {
264
+ if (e = b[f]) {
265
+ d.pathIsModule[e] ? goog.importModule_(goog.basePath + e) : goog.importScript_(goog.basePath + e);
166
266
  } else {
167
- throw Error("Undefined script input");
267
+ throw goog.moduleLoaderState_ = g, Error("Undefined script input");
168
268
  }
169
269
  }
270
+ goog.moduleLoaderState_ = g;
170
271
  }, goog.getPathFromDeps_ = function(a) {
171
272
  return a in goog.dependencies_.nameToPath ? goog.dependencies_.nameToPath[a] : null;
172
273
  }, goog.findBasePath_(), goog.global.CLOSURE_NO_DEPS || goog.importScript_(goog.basePath + "deps.js"));
@@ -343,11 +444,9 @@ goog.setCssNameMapping = function(a, b) {
343
444
  };
344
445
  !COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING);
345
446
  goog.getMsg = function(a, b) {
346
- var c = b || {}, d;
347
- for (d in c) {
348
- var e = ("" + c[d]).replace(/\$/g, "$$$$");
349
- a = a.replace(new RegExp("\\{\\$" + d + "\\}", "gi"), e);
350
- }
447
+ b && (a = a.replace(/\{\$([^}]+)}/g, function(a, d) {
448
+ return d in b ? b[d] : a;
449
+ }));
351
450
  return a;
352
451
  };
353
452
  goog.getMsgWithFallback = function(a, b) {
@@ -397,6 +496,48 @@ goog.scope = function(a) {
397
496
  a.call(goog.global);
398
497
  };
399
498
  COMPILED || (goog.global.COMPILED = COMPILED);
499
+ goog.defineClass = function(a, b) {
500
+ var c = b.constructor, d = b.statics;
501
+ c && c != Object.prototype.constructor || (c = function() {
502
+ throw Error("cannot instantiate an interface (no constructor defined).");
503
+ });
504
+ c = goog.defineClass.createSealingConstructor_(c, a);
505
+ a && goog.inherits(c, a);
506
+ delete b.constructor;
507
+ delete b.statics;
508
+ goog.defineClass.applyProperties_(c.prototype, b);
509
+ null != d && (d instanceof Function ? d(c) : goog.defineClass.applyProperties_(c, d));
510
+ return c;
511
+ };
512
+ goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
513
+ goog.defineClass.createSealingConstructor_ = function(a, b) {
514
+ if (goog.defineClass.SEAL_CLASS_INSTANCES && Object.seal instanceof Function) {
515
+ if (b && b.prototype && b.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]) {
516
+ return a;
517
+ }
518
+ var c = function() {
519
+ var b = a.apply(this, arguments) || this;
520
+ b[goog.UID_PROPERTY_] = b[goog.UID_PROPERTY_];
521
+ this.constructor === c && Object.seal(b);
522
+ return b;
523
+ };
524
+ return c;
525
+ }
526
+ return a;
527
+ };
528
+ goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
529
+ goog.defineClass.applyProperties_ = function(a, b) {
530
+ for (var c in b) {
531
+ Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
532
+ }
533
+ for (var d = 0;d < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++) {
534
+ c = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d], Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
535
+ }
536
+ };
537
+ goog.tagUnsealableClass = function(a) {
538
+ !COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES && (a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = !0);
539
+ };
540
+ goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable";
400
541
  goog.debug = {};
401
542
  goog.debug.Error = function(a) {
402
543
  if (Error.captureStackTrace) {
@@ -664,12 +805,6 @@ goog.string.escapeChar = function(a) {
664
805
  }
665
806
  return goog.string.jsEscapeCache_[a] = b;
666
807
  };
667
- goog.string.toMap = function(a) {
668
- for (var b = {}, c = 0;c < a.length;c++) {
669
- b[a.charAt(c)] = !0;
670
- }
671
- return b;
672
- };
673
808
  goog.string.contains = function(a, b) {
674
809
  return-1 != a.indexOf(b);
675
810
  };
@@ -786,6 +921,10 @@ goog.asserts.AssertionError = function(a, b) {
786
921
  };
787
922
  goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
788
923
  goog.asserts.AssertionError.prototype.name = "AssertionError";
924
+ goog.asserts.DEFAULT_ERROR_HANDLER = function(a) {
925
+ throw a;
926
+ };
927
+ goog.asserts.errorHandler_ = goog.asserts.DEFAULT_ERROR_HANDLER;
789
928
  goog.asserts.doAssertFailure_ = function(a, b, c, d) {
790
929
  var e = "Assertion failed";
791
930
  if (c) {
@@ -793,16 +932,18 @@ goog.asserts.doAssertFailure_ = function(a, b, c, d) {
793
932
  } else {
794
933
  a && (e += ": " + a, f = b);
795
934
  }
796
- throw new goog.asserts.AssertionError("" + e, f || []);
935
+ a = new goog.asserts.AssertionError("" + e, f || []);
936
+ goog.asserts.errorHandler_(a);
937
+ };
938
+ goog.asserts.setErrorHandler = function(a) {
939
+ goog.asserts.ENABLE_ASSERTS && (goog.asserts.errorHandler_ = a);
797
940
  };
798
941
  goog.asserts.assert = function(a, b, c) {
799
942
  goog.asserts.ENABLE_ASSERTS && !a && goog.asserts.doAssertFailure_("", null, b, Array.prototype.slice.call(arguments, 2));
800
943
  return a;
801
944
  };
802
945
  goog.asserts.fail = function(a, b) {
803
- if (goog.asserts.ENABLE_ASSERTS) {
804
- throw new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1));
805
- }
946
+ goog.asserts.ENABLE_ASSERTS && goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1)));
806
947
  };
807
948
  goog.asserts.assertNumber = function(a, b, c) {
808
949
  goog.asserts.ENABLE_ASSERTS && !goog.isNumber(a) && goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
@@ -1029,6 +1170,13 @@ goog.array.removeIf = function(a, b, c) {
1029
1170
  b = goog.array.findIndex(a, b, c);
1030
1171
  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1;
1031
1172
  };
1173
+ goog.array.removeAllIf = function(a, b, c) {
1174
+ var d = 0;
1175
+ goog.array.forEachRight(a, function(e, f) {
1176
+ b.call(c, e, f, a) && goog.array.removeAt(a, f) && d++;
1177
+ });
1178
+ return d;
1179
+ };
1032
1180
  goog.array.concat = function(a) {
1033
1181
  return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments);
1034
1182
  };
@@ -1369,6 +1517,17 @@ goog.object.set = function(a, b, c) {
1369
1517
  goog.object.setIfUndefined = function(a, b, c) {
1370
1518
  return b in a ? a[b] : a[b] = c;
1371
1519
  };
1520
+ goog.object.equals = function(a, b) {
1521
+ if (!goog.array.equals(goog.object.getKeys(a), goog.object.getKeys(b))) {
1522
+ return!1;
1523
+ }
1524
+ for (var c in a) {
1525
+ if (a[c] !== b[c]) {
1526
+ return!1;
1527
+ }
1528
+ }
1529
+ return!0;
1530
+ };
1372
1531
  goog.object.clone = function(a) {
1373
1532
  var b = {}, c;
1374
1533
  for (c in a) {
@@ -2437,7 +2596,7 @@ goog.labs.userAgent.browser.matchChrome_ = function() {
2437
2596
  return goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS");
2438
2597
  };
2439
2598
  goog.labs.userAgent.browser.matchAndroidBrowser_ = function() {
2440
- return goog.labs.userAgent.util.matchUserAgent("Android") && !goog.labs.userAgent.util.matchUserAgent("Chrome") && !goog.labs.userAgent.util.matchUserAgent("CriOS");
2599
+ return!goog.labs.userAgent.browser.isChrome() && goog.labs.userAgent.util.matchUserAgent("Android");
2441
2600
  };
2442
2601
  goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
2443
2602
  goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
@@ -2449,15 +2608,20 @@ goog.labs.userAgent.browser.isSilk = function() {
2449
2608
  return goog.labs.userAgent.util.matchUserAgent("Silk");
2450
2609
  };
2451
2610
  goog.labs.userAgent.browser.getVersion = function() {
2452
- var a = goog.labs.userAgent.util.getUserAgent();
2453
- if (goog.labs.userAgent.browser.isIE()) {
2454
- return goog.labs.userAgent.browser.getIEVersion_(a);
2611
+ function a(a) {
2612
+ a = goog.array.find(a, d);
2613
+ return c[a] || "";
2455
2614
  }
2456
- if (goog.labs.userAgent.browser.isOpera()) {
2457
- return goog.labs.userAgent.browser.getOperaVersion_(a);
2615
+ var b = goog.labs.userAgent.util.getUserAgent();
2616
+ if (goog.labs.userAgent.browser.isIE()) {
2617
+ return goog.labs.userAgent.browser.getIEVersion_(b);
2458
2618
  }
2459
- a = goog.labs.userAgent.util.extractVersionTuples(a);
2460
- return goog.labs.userAgent.browser.getVersionFromTuples_(a);
2619
+ var b = goog.labs.userAgent.util.extractVersionTuples(b), c = {};
2620
+ goog.array.forEach(b, function(a) {
2621
+ c[a[0]] = a[1];
2622
+ });
2623
+ var d = goog.partial(goog.object.containsKey, c);
2624
+ return goog.labs.userAgent.browser.isOpera() ? a(["Version", "Opera", "OPR"]) : goog.labs.userAgent.browser.isChrome() ? a(["Chrome", "CriOS"]) : (b = b[2]) && b[1] || "";
2461
2625
  };
2462
2626
  goog.labs.userAgent.browser.isVersionOrHigher = function(a) {
2463
2627
  return 0 <= goog.string.compareVersions(goog.labs.userAgent.browser.getVersion(), a);
@@ -2493,15 +2657,6 @@ goog.labs.userAgent.browser.getIEVersion_ = function(a) {
2493
2657
  }
2494
2658
  return b;
2495
2659
  };
2496
- goog.labs.userAgent.browser.getOperaVersion_ = function(a) {
2497
- a = goog.labs.userAgent.util.extractVersionTuples(a);
2498
- var b = goog.array.peek(a);
2499
- return "OPR" == b[0] && b[1] ? b[1] : goog.labs.userAgent.browser.getVersionFromTuples_(a);
2500
- };
2501
- goog.labs.userAgent.browser.getVersionFromTuples_ = function(a) {
2502
- goog.asserts.assert(2 < a.length, "Couldn't extract version tuple from user agent string");
2503
- return a[2] && a[2][1] ? a[2][1] : "";
2504
- };
2505
2660
  goog.labs.userAgent.engine = {};
2506
2661
  goog.labs.userAgent.engine.isPresto = function() {
2507
2662
  return goog.labs.userAgent.util.matchUserAgent("Presto");
@@ -2634,7 +2789,7 @@ goog.uri.utils.buildFromEncodedParts = function(a, b, c, d, e, f, g) {
2634
2789
  g && (h += "#" + g);
2635
2790
  return h;
2636
2791
  };
2637
- goog.uri.utils.splitRe_ = RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$");
2792
+ goog.uri.utils.splitRe_ = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;
2638
2793
  goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7};
2639
2794
  goog.uri.utils.split = function(a) {
2640
2795
  goog.uri.utils.phishingProtection_();
@@ -2653,8 +2808,8 @@ goog.uri.utils.phishingProtection_ = function() {
2653
2808
  }
2654
2809
  }
2655
2810
  };
2656
- goog.uri.utils.decodeIfPossible_ = function(a) {
2657
- return a && decodeURIComponent(a);
2811
+ goog.uri.utils.decodeIfPossible_ = function(a, b) {
2812
+ return a ? b ? decodeURI(a) : decodeURIComponent(a) : a;
2658
2813
  };
2659
2814
  goog.uri.utils.getComponentByIndex_ = function(a, b) {
2660
2815
  return goog.uri.utils.split(b)[a] || null;
@@ -2677,7 +2832,7 @@ goog.uri.utils.getDomainEncoded = function(a) {
2677
2832
  return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, a);
2678
2833
  };
2679
2834
  goog.uri.utils.getDomain = function(a) {
2680
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a));
2835
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a), !0);
2681
2836
  };
2682
2837
  goog.uri.utils.getPort = function(a) {
2683
2838
  return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, a)) || null;
@@ -2686,7 +2841,7 @@ goog.uri.utils.getPathEncoded = function(a) {
2686
2841
  return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, a);
2687
2842
  };
2688
2843
  goog.uri.utils.getPath = function(a) {
2689
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a));
2844
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a), !0);
2690
2845
  };
2691
2846
  goog.uri.utils.getQueryData = function(a) {
2692
2847
  return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, a);
@@ -2857,17 +3012,17 @@ goog.Uri.prototype.isReadOnly_ = !1;
2857
3012
  goog.Uri.prototype.ignoreCase_ = !1;
2858
3013
  goog.Uri.prototype.toString = function() {
2859
3014
  var a = [], b = this.getScheme();
2860
- b && a.push(goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInSchemeOrUserInfo_), ":");
3015
+ b && a.push(goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), ":");
2861
3016
  if (b = this.getDomain()) {
2862
3017
  a.push("//");
2863
3018
  var c = this.getUserInfo();
2864
- c && a.push(goog.Uri.encodeSpecialChars_(c, goog.Uri.reDisallowedInSchemeOrUserInfo_), "@");
2865
- a.push(goog.string.urlEncode(b));
3019
+ c && a.push(goog.Uri.encodeSpecialChars_(c, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), "@");
3020
+ a.push(goog.Uri.removeDoubleEncoding_(goog.string.urlEncode(b)));
2866
3021
  b = this.getPort();
2867
3022
  null != b && a.push(":", String(b));
2868
3023
  }
2869
3024
  if (b = this.getPath()) {
2870
- this.hasDomain() && "/" != b.charAt(0) && a.push("/"), a.push(goog.Uri.encodeSpecialChars_(b, "/" == b.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_));
3025
+ this.hasDomain() && "/" != b.charAt(0) && a.push("/"), a.push(goog.Uri.encodeSpecialChars_(b, "/" == b.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_, !0));
2871
3026
  }
2872
3027
  (b = this.getEncodedQuery()) && a.push("?", b);
2873
3028
  (b = this.getFragment()) && a.push("#", goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInFragment_));
@@ -2907,7 +3062,7 @@ goog.Uri.prototype.getScheme = function() {
2907
3062
  };
2908
3063
  goog.Uri.prototype.setScheme = function(a, b) {
2909
3064
  this.enforceReadOnly();
2910
- if (this.scheme_ = b ? goog.Uri.decodeOrEmpty_(a) : a) {
3065
+ if (this.scheme_ = b ? goog.Uri.decodeOrEmpty_(a, !0) : a) {
2911
3066
  this.scheme_ = this.scheme_.replace(/:$/, "");
2912
3067
  }
2913
3068
  return this;
@@ -2931,7 +3086,7 @@ goog.Uri.prototype.getDomain = function() {
2931
3086
  };
2932
3087
  goog.Uri.prototype.setDomain = function(a, b) {
2933
3088
  this.enforceReadOnly();
2934
- this.domain_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
3089
+ this.domain_ = b ? goog.Uri.decodeOrEmpty_(a, !0) : a;
2935
3090
  return this;
2936
3091
  };
2937
3092
  goog.Uri.prototype.hasDomain = function() {
@@ -2961,7 +3116,7 @@ goog.Uri.prototype.getPath = function() {
2961
3116
  };
2962
3117
  goog.Uri.prototype.setPath = function(a, b) {
2963
3118
  this.enforceReadOnly();
2964
- this.path_ = b ? goog.Uri.decodeOrEmpty_(a) : a;
3119
+ this.path_ = b ? goog.Uri.decodeOrEmpty_(a, !0) : a;
2965
3120
  return this;
2966
3121
  };
2967
3122
  goog.Uri.prototype.hasPath = function() {
@@ -3085,16 +3240,19 @@ goog.Uri.removeDotSegments = function(a) {
3085
3240
  }
3086
3241
  return a;
3087
3242
  };
3088
- goog.Uri.decodeOrEmpty_ = function(a) {
3089
- return a ? decodeURIComponent(a) : "";
3243
+ goog.Uri.decodeOrEmpty_ = function(a, b) {
3244
+ return a ? b ? decodeURI(a) : decodeURIComponent(a) : "";
3090
3245
  };
3091
- goog.Uri.encodeSpecialChars_ = function(a, b) {
3092
- return goog.isString(a) ? encodeURI(a).replace(b, goog.Uri.encodeChar_) : null;
3246
+ goog.Uri.encodeSpecialChars_ = function(a, b, c) {
3247
+ return goog.isString(a) ? (a = encodeURI(a).replace(b, goog.Uri.encodeChar_), c && (a = goog.Uri.removeDoubleEncoding_(a)), a) : null;
3093
3248
  };
3094
3249
  goog.Uri.encodeChar_ = function(a) {
3095
3250
  a = a.charCodeAt(0);
3096
3251
  return "%" + (a >> 4 & 15).toString(16) + (a & 15).toString(16);
3097
3252
  };
3253
+ goog.Uri.removeDoubleEncoding_ = function(a) {
3254
+ return a.replace(/%25([0-9a-fA-F]{2})/g, "%$1");
3255
+ };
3098
3256
  goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\/\?@]/g;
3099
3257
  goog.Uri.reDisallowedInRelativePath_ = /[\#\?:]/g;
3100
3258
  goog.Uri.reDisallowedInAbsolutePath_ = /[\#\?]/g;
@@ -3785,6 +3943,7 @@ goog.debug.Logger = function(a) {
3785
3943
  this.name_ = a;
3786
3944
  this.handlers_ = this.children_ = this.level_ = this.parent_ = null;
3787
3945
  };
3946
+ goog.debug.Logger.ROOT_LOGGER_NAME = "";
3788
3947
  goog.debug.Logger.ENABLE_HIERARCHY = !0;
3789
3948
  goog.debug.Logger.ENABLE_HIERARCHY || (goog.debug.Logger.rootHandlers_ = []);
3790
3949
  goog.debug.Logger.Level = function(a, b) {
@@ -3945,7 +4104,7 @@ goog.debug.LogManager = {};
3945
4104
  goog.debug.LogManager.loggers_ = {};
3946
4105
  goog.debug.LogManager.rootLogger_ = null;
3947
4106
  goog.debug.LogManager.initialize = function() {
3948
- goog.debug.LogManager.rootLogger_ || (goog.debug.LogManager.rootLogger_ = new goog.debug.Logger(""), goog.debug.LogManager.loggers_[""] = goog.debug.LogManager.rootLogger_, goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG));
4107
+ goog.debug.LogManager.rootLogger_ || (goog.debug.LogManager.rootLogger_ = new goog.debug.Logger(goog.debug.Logger.ROOT_LOGGER_NAME), goog.debug.LogManager.loggers_[goog.debug.Logger.ROOT_LOGGER_NAME] = goog.debug.LogManager.rootLogger_, goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG));
3949
4108
  };
3950
4109
  goog.debug.LogManager.getLoggers = function() {
3951
4110
  return goog.debug.LogManager.loggers_;
@@ -3973,64 +4132,11 @@ goog.debug.LogManager.createLogger_ = function(a) {
3973
4132
  return goog.debug.LogManager.loggers_[a] = b;
3974
4133
  };
3975
4134
  goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.1"), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT,
3976
- INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};
4135
+ INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE, LEGACY_IE_RANGES:goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)};
3977
4136
  goog.dom.TagName = {A:"A", ABBR:"ABBR", ACRONYM:"ACRONYM", ADDRESS:"ADDRESS", APPLET:"APPLET", AREA:"AREA", ARTICLE:"ARTICLE", ASIDE:"ASIDE", AUDIO:"AUDIO", B:"B", BASE:"BASE", BASEFONT:"BASEFONT", BDI:"BDI", BDO:"BDO", BIG:"BIG", BLOCKQUOTE:"BLOCKQUOTE", BODY:"BODY", BR:"BR", BUTTON:"BUTTON", CANVAS:"CANVAS", CAPTION:"CAPTION", CENTER:"CENTER", CITE:"CITE", CODE:"CODE", COL:"COL", COLGROUP:"COLGROUP", COMMAND:"COMMAND", DATA:"DATA", DATALIST:"DATALIST", DD:"DD", DEL:"DEL", DETAILS:"DETAILS", DFN:"DFN",
3978
4137
  DIALOG:"DIALOG", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", EMBED:"EMBED", FIELDSET:"FIELDSET", FIGCAPTION:"FIGCAPTION", FIGURE:"FIGURE", FONT:"FONT", FOOTER:"FOOTER", FORM:"FORM", FRAME:"FRAME", FRAMESET:"FRAMESET", H1:"H1", H2:"H2", H3:"H3", H4:"H4", H5:"H5", H6:"H6", HEAD:"HEAD", HEADER:"HEADER", HGROUP:"HGROUP", HR:"HR", HTML:"HTML", I:"I", IFRAME:"IFRAME", IMG:"IMG", INPUT:"INPUT", INS:"INS", ISINDEX:"ISINDEX", KBD:"KBD", KEYGEN:"KEYGEN", LABEL:"LABEL", LEGEND:"LEGEND", LI:"LI", LINK:"LINK",
3979
4138
  MAP:"MAP", MARK:"MARK", MATH:"MATH", MENU:"MENU", META:"META", METER:"METER", NAV:"NAV", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", OUTPUT:"OUTPUT", P:"P", PARAM:"PARAM", PRE:"PRE", PROGRESS:"PROGRESS", Q:"Q", RP:"RP", RT:"RT", RUBY:"RUBY", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SECTION:"SECTION", SELECT:"SELECT", SMALL:"SMALL", SOURCE:"SOURCE", SPAN:"SPAN", STRIKE:"STRIKE", STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUMMARY:"SUMMARY",
3980
4139
  SUP:"SUP", SVG:"SVG", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TIME:"TIME", TITLE:"TITLE", TR:"TR", TRACK:"TRACK", TT:"TT", U:"U", UL:"UL", VAR:"VAR", VIDEO:"VIDEO", WBR:"WBR"};
3981
- goog.dom.classes = {};
3982
- goog.dom.classes.set = function(a, b) {
3983
- a.className = b;
3984
- };
3985
- goog.dom.classes.get = function(a) {
3986
- a = a.className;
3987
- return goog.isString(a) && a.match(/\S+/g) || [];
3988
- };
3989
- goog.dom.classes.add = function(a, b) {
3990
- var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), e = c.length + d.length;
3991
- goog.dom.classes.add_(c, d);
3992
- goog.dom.classes.set(a, c.join(" "));
3993
- return c.length == e;
3994
- };
3995
- goog.dom.classes.remove = function(a, b) {
3996
- var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), e = goog.dom.classes.getDifference_(c, d);
3997
- goog.dom.classes.set(a, e.join(" "));
3998
- return e.length == c.length - d.length;
3999
- };
4000
- goog.dom.classes.add_ = function(a, b) {
4001
- for (var c = 0;c < b.length;c++) {
4002
- goog.array.contains(a, b[c]) || a.push(b[c]);
4003
- }
4004
- };
4005
- goog.dom.classes.getDifference_ = function(a, b) {
4006
- return goog.array.filter(a, function(a) {
4007
- return!goog.array.contains(b, a);
4008
- });
4009
- };
4010
- goog.dom.classes.swap = function(a, b, c) {
4011
- for (var d = goog.dom.classes.get(a), e = !1, f = 0;f < d.length;f++) {
4012
- d[f] == b && (goog.array.splice(d, f--, 1), e = !0);
4013
- }
4014
- e && (d.push(c), goog.dom.classes.set(a, d.join(" ")));
4015
- return e;
4016
- };
4017
- goog.dom.classes.addRemove = function(a, b, c) {
4018
- var d = goog.dom.classes.get(a);
4019
- goog.isString(b) ? goog.array.remove(d, b) : goog.isArray(b) && (d = goog.dom.classes.getDifference_(d, b));
4020
- goog.isString(c) && !goog.array.contains(d, c) ? d.push(c) : goog.isArray(c) && goog.dom.classes.add_(d, c);
4021
- goog.dom.classes.set(a, d.join(" "));
4022
- };
4023
- goog.dom.classes.has = function(a, b) {
4024
- return goog.array.contains(goog.dom.classes.get(a), b);
4025
- };
4026
- goog.dom.classes.enable = function(a, b, c) {
4027
- c ? goog.dom.classes.add(a, b) : goog.dom.classes.remove(a, b);
4028
- };
4029
- goog.dom.classes.toggle = function(a, b) {
4030
- var c = !goog.dom.classes.has(a, b);
4031
- goog.dom.classes.enable(a, b, c);
4032
- return c;
4033
- };
4034
4140
  goog.math.Coordinate = function(a, b) {
4035
4141
  this.x = goog.isDef(a) ? a : 0;
4036
4142
  this.y = goog.isDef(b) ? b : 0;
@@ -4248,8 +4354,11 @@ goog.dom.getDocumentHeight = function() {
4248
4354
  goog.dom.getDocumentHeight_ = function(a) {
4249
4355
  var b = a.document, c = 0;
4250
4356
  if (b) {
4251
- a = goog.dom.getViewportSize_(a).height;
4252
4357
  var c = b.body, d = b.documentElement;
4358
+ if (!d || !c) {
4359
+ return 0;
4360
+ }
4361
+ a = goog.dom.getViewportSize_(a).height;
4253
4362
  if (goog.dom.isCss1CompatMode_(b) && d.scrollHeight) {
4254
4363
  c = d.scrollHeight != a ? d.scrollHeight : d.offsetHeight;
4255
4364
  } else {
@@ -4302,7 +4411,7 @@ goog.dom.createDom_ = function(a, b) {
4302
4411
  c = c.join("");
4303
4412
  }
4304
4413
  c = a.createElement(c);
4305
- d && (goog.isString(d) ? c.className = d : goog.isArray(d) ? goog.dom.classes.add.apply(null, [c].concat(d)) : goog.dom.setProperties(c, d));
4414
+ d && (goog.isString(d) ? c.className = d : goog.isArray(d) ? c.className = d.join(" ") : goog.dom.setProperties(c, d));
4306
4415
  2 < b.length && goog.dom.append_(a, c, b, 2);
4307
4416
  return c;
4308
4417
  };
@@ -4779,7 +4888,7 @@ goog.dom.getAncestorByTagNameAndClass = function(a, b, c) {
4779
4888
  }
4780
4889
  var d = b ? b.toUpperCase() : null;
4781
4890
  return goog.dom.getAncestor(a, function(a) {
4782
- return(!d || a.nodeName == d) && (!c || goog.dom.classes.has(a, c));
4891
+ return(!d || a.nodeName == d) && (!c || goog.isString(a.className) && goog.array.contains(a.className.split(/\s+/), c));
4783
4892
  }, !0);
4784
4893
  };
4785
4894
  goog.dom.getAncestorByClass = function(a, b) {
@@ -4804,10 +4913,10 @@ goog.dom.getActiveElement = function(a) {
4804
4913
  }
4805
4914
  return null;
4806
4915
  };
4807
- goog.dom.getPixelRatio = goog.functions.cacheReturnValue(function() {
4916
+ goog.dom.getPixelRatio = function() {
4808
4917
  var a = goog.dom.getWindow(), b = goog.userAgent.GECKO && goog.userAgent.MOBILE;
4809
- return goog.isDef(a.devicePixelRatio) && !b ? a.devicePixelRatio : a.matchMedia ? goog.dom.matchesPixelRatio_(0.75) || goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(2) || goog.dom.matchesPixelRatio_(3) || 1 : 1;
4810
- });
4918
+ return goog.isDef(a.devicePixelRatio) && !b ? a.devicePixelRatio : a.matchMedia ? goog.dom.matchesPixelRatio_(.75) || goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(2) || goog.dom.matchesPixelRatio_(3) || 1 : 1;
4919
+ };
4811
4920
  goog.dom.matchesPixelRatio_ = function(a) {
4812
4921
  return goog.dom.getWindow().matchMedia("(-webkit-min-device-pixel-ratio: " + a + "),(min--moz-device-pixel-ratio: " + a + "),(min-resolution: " + a + "dppx)").matches ? a : 0;
4813
4922
  };
@@ -4954,6 +5063,12 @@ goog.math.Box.boundingBox = function(a) {
4954
5063
  }
4955
5064
  return b;
4956
5065
  };
5066
+ goog.math.Box.prototype.getWidth = function() {
5067
+ return this.right - this.left;
5068
+ };
5069
+ goog.math.Box.prototype.getHeight = function() {
5070
+ return this.bottom - this.top;
5071
+ };
4957
5072
  goog.math.Box.prototype.clone = function() {
4958
5073
  return new goog.math.Box(this.top, this.right, this.bottom, this.left);
4959
5074
  };
@@ -5165,7 +5280,13 @@ goog.math.Rect.prototype.scale = function(a, b) {
5165
5280
  goog.style = {};
5166
5281
  goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS = !1;
5167
5282
  goog.style.setStyle = function(a, b, c) {
5168
- goog.isString(b) ? goog.style.setStyle_(a, c, b) : goog.object.forEach(b, goog.partial(goog.style.setStyle_, a));
5283
+ if (goog.isString(b)) {
5284
+ goog.style.setStyle_(a, c, b);
5285
+ } else {
5286
+ for (var d in b) {
5287
+ goog.style.setStyle_(a, b[d], d);
5288
+ }
5289
+ }
5169
5290
  };
5170
5291
  goog.style.setStyle_ = function(a, b, c) {
5171
5292
  (c = goog.style.getVendorJsStyleName_(a, c)) && (a.style[c] = b);
@@ -5268,7 +5389,7 @@ goog.style.getOffsetParent = function(a) {
5268
5389
  };
5269
5390
  goog.style.getVisibleRectForElement = function(a) {
5270
5391
  for (var b = new goog.math.Box(0, Infinity, Infinity, 0), c = goog.dom.getDomHelper(a), d = c.getDocument().body, e = c.getDocument().documentElement, f = c.getDocumentScrollElement();a = goog.style.getOffsetParent(a);) {
5271
- if (!(goog.userAgent.IE && 0 == a.clientWidth || goog.userAgent.WEBKIT && 0 == a.clientHeight && a == d || a == d || a == e || "visible" == goog.style.getStyle_(a, "overflow"))) {
5392
+ if (!(goog.userAgent.IE && 0 == a.clientWidth || goog.userAgent.WEBKIT && 0 == a.clientHeight && a == d) && a != d && a != e && "visible" != goog.style.getStyle_(a, "overflow")) {
5272
5393
  var g = goog.style.getPageOffset(a), h = goog.style.getClientLeftTop(a);
5273
5394
  g.x += h.x;
5274
5395
  g.y += h.y;
@@ -5365,7 +5486,7 @@ goog.style.translateRectForAnotherFrame = function(a, b, c) {
5365
5486
  var d = b.getDocument().body;
5366
5487
  c = goog.style.getFramedPageOffset(d, c.getWindow());
5367
5488
  c = goog.math.Coordinate.difference(c, goog.style.getPageOffset(d));
5368
- goog.userAgent.IE && !b.isCss1CompatMode() && (c = goog.math.Coordinate.difference(c, b.getDocumentScroll()));
5489
+ !goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9) || b.isCss1CompatMode() || (c = goog.math.Coordinate.difference(c, b.getDocumentScroll()));
5369
5490
  a.left += c.x;
5370
5491
  a.top += c.y;
5371
5492
  }
@@ -5391,7 +5512,7 @@ goog.style.getClientPosition = function(a) {
5391
5512
  return goog.style.getClientPositionForElement_(a);
5392
5513
  }
5393
5514
  var b = goog.isFunction(a.getBrowserEvent), c = a;
5394
- a.targetTouches ? c = a.targetTouches[0] : b && a.getBrowserEvent().targetTouches && (c = a.getBrowserEvent().targetTouches[0]);
5515
+ a.targetTouches && a.targetTouches.length ? c = a.targetTouches[0] : b && a.getBrowserEvent().targetTouches && a.getBrowserEvent().targetTouches.length && (c = a.getBrowserEvent().targetTouches[0]);
5395
5516
  return new goog.math.Coordinate(c.clientX, c.clientY);
5396
5517
  };
5397
5518
  goog.style.setPageOffset = function(a, b, c) {
@@ -5538,7 +5659,7 @@ goog.style.getBorderBoxSize = function(a) {
5538
5659
  };
5539
5660
  goog.style.setBorderBoxSize = function(a, b) {
5540
5661
  var c = goog.dom.getOwnerDocument(a), d = goog.dom.getDomHelper(c).isCss1CompatMode();
5541
- if (!goog.userAgent.IE || d && goog.userAgent.isVersionOrHigher("8")) {
5662
+ if (!goog.userAgent.IE || goog.userAgent.isVersionOrHigher("10") || d && goog.userAgent.isVersionOrHigher("8")) {
5542
5663
  goog.style.setBoxSizingSize_(a, b, "border-box");
5543
5664
  } else {
5544
5665
  if (c = a.style, d) {
@@ -5562,7 +5683,7 @@ goog.style.getContentBoxSize = function(a) {
5562
5683
  };
5563
5684
  goog.style.setContentBoxSize = function(a, b) {
5564
5685
  var c = goog.dom.getOwnerDocument(a), d = goog.dom.getDomHelper(c).isCss1CompatMode();
5565
- if (!goog.userAgent.IE || d && goog.userAgent.isVersionOrHigher("8")) {
5686
+ if (!goog.userAgent.IE || goog.userAgent.isVersionOrHigher("10") || d && goog.userAgent.isVersionOrHigher("8")) {
5566
5687
  goog.style.setBoxSizingSize_(a, b, "content-box");
5567
5688
  } else {
5568
5689
  if (c = a.style, d) {
@@ -5754,6 +5875,7 @@ goog.debug.DivConsole.prototype.clear = function() {
5754
5875
  };
5755
5876
  goog.log = {};
5756
5877
  goog.log.ENABLED = goog.debug.LOGGING_ENABLED;
5878
+ goog.log.ROOT_LOGGER_NAME = goog.debug.Logger.ROOT_LOGGER_NAME;
5757
5879
  goog.log.Logger = goog.debug.Logger;
5758
5880
  goog.log.Level = goog.debug.Logger.Level;
5759
5881
  goog.log.LogRecord = goog.debug.LogRecord;
@@ -5906,12 +6028,12 @@ bot.userAgent.SAFARI_6 = goog.userAgent.product.SAFARI && bot.userAgent.isProduc
5906
6028
  bot.userAgent.WINDOWS_PHONE = goog.userAgent.IE && -1 != goog.userAgent.getUserAgentString().indexOf("IEMobile");
5907
6029
  goog.json = {};
5908
6030
  goog.json.USE_NATIVE_JSON = !1;
5909
- goog.json.isValid_ = function(a) {
6031
+ goog.json.isValid = function(a) {
5910
6032
  return/^\s*$/.test(a) ? !1 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""));
5911
6033
  };
5912
6034
  goog.json.parse = goog.json.USE_NATIVE_JSON ? goog.global.JSON.parse : function(a) {
5913
6035
  a = String(a);
5914
- if (goog.json.isValid_(a)) {
6036
+ if (goog.json.isValid(a)) {
5915
6037
  try {
5916
6038
  return eval("(" + a + ")");
5917
6039
  } catch (b) {
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ root = File.expand_path(File.dirname(__FILE__))
4
+ if root != Dir.pwd
5
+ raise "cwd must be #{root} when reading gemspec"
6
+ end
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = "selenium-webdriver"
10
+ s.version = "2.43.0"
11
+
12
+ s.authors = ["Jari Bakken"]
13
+ s.email = "jari.bakken@gmail.com"
14
+ s.description = "WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application."
15
+ s.summary = "The next generation developer focused tool for automated testing of webapps"
16
+ s.homepage = "http://selenium.googlecode.com"
17
+ s.licenses = ["Apache"]
18
+
19
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
20
+ s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
21
+
22
+ s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
23
+ s.require_paths = ["lib"]
24
+
25
+ s.add_runtime_dependency "multi_json", ["~> 1.0"]
26
+ s.add_runtime_dependency "rubyzip", ["~> 1.0"]
27
+ s.add_runtime_dependency "childprocess", ["~> 0.5"]
28
+ s.add_runtime_dependency "websocket", ["~> 1.0"]
29
+
30
+ s.add_development_dependency "rspec", ["~> 2.99.0"]
31
+ s.add_development_dependency "rack", ["~> 1.0"]
32
+ s.add_development_dependency "ci_reporter", ["~> 1.6", ">= 1.6.2"]
33
+ s.add_development_dependency "webmock", ["~> 1.7", ">= 1.7.5"]
34
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.42.0
5
+ version: 2.43.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jari Bakken
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2014-05-23 00:00:00 +02:00
13
+ date: 2014-09-09 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -41,9 +41,9 @@ dependencies:
41
41
  requirement: &id003 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
- - - ">="
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: 0.5.0
46
+ version: "0.5"
47
47
  type: :runtime
48
48
  version_requirements: *id003
49
49
  - !ruby/object:Gem::Dependency
@@ -54,7 +54,7 @@ dependencies:
54
54
  requirements:
55
55
  - - ~>
56
56
  - !ruby/object:Gem::Version
57
- version: 1.0.4
57
+ version: "1.0"
58
58
  type: :runtime
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
@@ -65,7 +65,7 @@ dependencies:
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: "2.0"
68
+ version: 2.99.0
69
69
  type: :development
70
70
  version_requirements: *id005
71
71
  - !ruby/object:Gem::Dependency
@@ -86,6 +86,9 @@ dependencies:
86
86
  none: false
87
87
  requirements:
88
88
  - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: "1.6"
91
+ - - ">="
89
92
  - !ruby/object:Gem::Version
90
93
  version: 1.6.2
91
94
  type: :development
@@ -97,6 +100,9 @@ dependencies:
97
100
  none: false
98
101
  requirements:
99
102
  - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: "1.7"
105
+ - - ">="
100
106
  - !ruby/object:Gem::Version
101
107
  version: 1.7.5
102
108
  type: :development
@@ -110,6 +116,11 @@ extensions: []
110
116
  extra_rdoc_files: []
111
117
 
112
118
  files:
119
+ - CHANGES
120
+ - COPYING
121
+ - Gemfile
122
+ - README.md
123
+ - selenium-webdriver.gemspec
113
124
  - lib/selenium-client.rb
114
125
  - lib/selenium-webdriver.rb
115
126
  - lib/selenium/client.rb
@@ -227,9 +238,6 @@ files:
227
238
  - lib/selenium/webdriver/support/color.rb
228
239
  - lib/selenium/webdriver/support/event_firing_bridge.rb
229
240
  - lib/selenium/webdriver/support/select.rb
230
- - CHANGES
231
- - README.md
232
- - COPYING
233
241
  has_rdoc: true
234
242
  homepage: http://selenium.googlecode.com
235
243
  licenses:
@@ -248,9 +256,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
248
256
  required_rubygems_version: !ruby/object:Gem::Requirement
249
257
  none: false
250
258
  requirements:
251
- - - ">="
259
+ - - ">"
252
260
  - !ruby/object:Gem::Version
253
- version: "0"
261
+ version: 1.3.1
254
262
  requirements: []
255
263
 
256
264
  rubyforge_project: