selenium-webdriver 2.42.0 → 2.43.0

Sign up to get free protection for your applications and to get access to all the features.
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: