selenium-webdriver 2.47.0 → 2.52.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.
Files changed (529) hide show
  1. package/CHANGES.md +96 -0
  2. package/NOTICE +1 -1
  3. package/README.md +57 -6
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +597 -5
  8. package/example/google_search_generator.js +2 -4
  9. package/example/logging.js +6 -2
  10. package/executors.js +11 -27
  11. package/firefox/binary.js +80 -114
  12. package/firefox/extension.js +10 -19
  13. package/firefox/index.js +175 -171
  14. package/firefox/profile.js +221 -239
  15. package/http/index.js +396 -77
  16. package/http/util.js +35 -35
  17. package/ie.js +288 -309
  18. package/index.js +34 -125
  19. package/io/exec.js +58 -39
  20. package/io/index.js +54 -48
  21. package/lib/actions.js +594 -0
  22. package/lib/by.js +276 -0
  23. package/lib/capabilities.js +404 -0
  24. package/lib/{webdriver/command.js → command.js} +89 -72
  25. package/lib/{webdriver/button.js → devmode.js} +13 -8
  26. package/lib/events.js +210 -0
  27. package/lib/firefox/amd64/libnoblur64.so +0 -0
  28. package/lib/firefox/i386/libnoblur.so +0 -0
  29. package/lib/firefox/webdriver.json +6 -1
  30. package/lib/firefox/webdriver.xpi +0 -0
  31. package/lib/{webdriver/key.js → input.js} +82 -2
  32. package/lib/logging.js +668 -0
  33. package/lib/promise.js +3093 -0
  34. package/lib/safari/client.js +697 -659
  35. package/lib/session.js +79 -0
  36. package/{test/promise_aplus_test.js → lib/symbols.js} +15 -25
  37. package/lib/test/build.js +4 -4
  38. package/lib/test/data/click_tests/disappearing_element.html +62 -0
  39. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  40. package/lib/test/data/click_tests/overlapping_elements.html +70 -0
  41. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  42. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  43. package/lib/test/data/readOnlyPage.html +3 -1
  44. package/lib/test/data/selectPage.html +18 -2
  45. package/lib/test/data/simpleTest.html +1 -0
  46. package/lib/test/fileserver.js +3 -4
  47. package/lib/test/index.js +13 -4
  48. package/lib/test/resources.js +1 -1
  49. package/lib/until.js +428 -0
  50. package/lib/webdriver.js +2351 -0
  51. package/net/portprober.js +15 -11
  52. package/opera.js +295 -314
  53. package/package.json +6 -5
  54. package/phantomjs.js +135 -140
  55. package/proxy.js +6 -4
  56. package/remote/index.js +234 -219
  57. package/safari.js +319 -310
  58. package/test/chrome/options_test.js +11 -9
  59. package/test/element_finding_test.js +51 -13
  60. package/test/error_test.js +163 -0
  61. package/test/execute_script_test.js +1 -1
  62. package/test/firefox/firefox_test.js +24 -0
  63. package/test/http/http_test.js +354 -43
  64. package/test/http/util_test.js +25 -23
  65. package/test/io_test.js +6 -1
  66. package/test/lib/by_test.js +127 -0
  67. package/test/lib/capabilities_test.js +84 -0
  68. package/test/lib/events_test.js +177 -0
  69. package/test/lib/logging_test.js +272 -0
  70. package/test/lib/promise_aplus_test.js +74 -0
  71. package/test/lib/promise_error_test.js +808 -0
  72. package/test/lib/promise_flow_test.js +2282 -0
  73. package/test/lib/promise_generator_test.js +308 -0
  74. package/test/lib/promise_test.js +996 -0
  75. package/test/lib/testutil.js +90 -0
  76. package/test/lib/until_test.js +436 -0
  77. package/test/lib/webdriver_test.js +2207 -0
  78. package/test/page_loading_test.js +7 -9
  79. package/test/stale_element_test.js +2 -2
  80. package/test/testing/assert_test.js +374 -0
  81. package/test/testing/index_test.js +9 -11
  82. package/testing/assert.js +334 -17
  83. package/testing/index.js +10 -0
  84. package/_base.js +0 -200
  85. package/docs/Changes.html +0 -317
  86. package/docs/class_bot_Error.html +0 -15
  87. package/docs/class_webdriver_ActionSequence.html +0 -115
  88. package/docs/class_webdriver_Alert.html +0 -24
  89. package/docs/class_webdriver_AlertPromise.html +0 -91
  90. package/docs/class_webdriver_Capabilities.html +0 -60
  91. package/docs/class_webdriver_Command.html +0 -15
  92. package/docs/class_webdriver_EventEmitter.html +0 -35
  93. package/docs/class_webdriver_FileDetector.html +0 -21
  94. package/docs/class_webdriver_Locator.html +0 -12
  95. package/docs/class_webdriver_Serializable.html +0 -9
  96. package/docs/class_webdriver_Session.html +0 -13
  97. package/docs/class_webdriver_TouchSequence.html +0 -49
  98. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  99. package/docs/class_webdriver_WebDriver.html +0 -313
  100. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  101. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  102. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  103. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  104. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  105. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  106. package/docs/class_webdriver_WebElement.html +0 -216
  107. package/docs/class_webdriver_WebElementPromise.html +0 -266
  108. package/docs/class_webdriver_http_Executor.html +0 -22
  109. package/docs/class_webdriver_http_Request.html +0 -12
  110. package/docs/class_webdriver_http_Response.html +0 -13
  111. package/docs/class_webdriver_logging_Entry.html +0 -15
  112. package/docs/class_webdriver_logging_Level.html +0 -55
  113. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  114. package/docs/class_webdriver_logging_Logger.html +0 -119
  115. package/docs/class_webdriver_logging_Preferences.html +0 -8
  116. package/docs/class_webdriver_promise_CancellationError.html +0 -18
  117. package/docs/class_webdriver_promise_ControlFlow.html +0 -109
  118. package/docs/class_webdriver_promise_Deferred.html +0 -84
  119. package/docs/class_webdriver_promise_Promise.html +0 -74
  120. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  121. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  122. package/docs/class_webdriver_testing_Assertion.html +0 -99
  123. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  124. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  125. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  126. package/docs/class_webdriver_until_Condition.html +0 -7
  127. package/docs/dossier.css +0 -1
  128. package/docs/dossier.js +0 -86
  129. package/docs/enum_bot_ErrorCode.html +0 -3
  130. package/docs/enum_bot_Error_State.html +0 -2
  131. package/docs/enum_webdriver_Browser.html +0 -2
  132. package/docs/enum_webdriver_Button.html +0 -2
  133. package/docs/enum_webdriver_Capability.html +0 -33
  134. package/docs/enum_webdriver_CommandName.html +0 -3
  135. package/docs/enum_webdriver_Key.html +0 -12
  136. package/docs/enum_webdriver_logging_Type.html +0 -6
  137. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  138. package/docs/index.html +0 -123
  139. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  140. package/docs/interface_webdriver_http_Client.html +0 -10
  141. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  142. package/docs/module_selenium-webdriver.html +0 -23
  143. package/docs/module_selenium-webdriver__base.html +0 -23
  144. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  145. package/docs/module_selenium-webdriver_builder.html +0 -2
  146. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  147. package/docs/module_selenium-webdriver_chrome.html +0 -90
  148. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  149. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  150. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  151. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  152. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  153. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  154. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  155. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  156. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  157. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  158. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  159. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  160. package/docs/module_selenium-webdriver_class_WebElement.html +0 -216
  161. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -266
  162. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  163. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  164. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  165. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  166. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  167. package/docs/module_selenium-webdriver_error.html +0 -4
  168. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  169. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  170. package/docs/module_selenium-webdriver_executors.html +0 -10
  171. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  172. package/docs/module_selenium-webdriver_firefox.html +0 -67
  173. package/docs/module_selenium-webdriver_firefox_binary.html +0 -4
  174. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -21
  175. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -21
  176. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  177. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  178. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  179. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  180. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  181. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  182. package/docs/module_selenium-webdriver_http.html +0 -9
  183. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  184. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  185. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  186. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  187. package/docs/module_selenium-webdriver_http_util.html +0 -17
  188. package/docs/module_selenium-webdriver_ie.html +0 -11
  189. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  190. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  191. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  192. package/docs/module_selenium-webdriver_io.html +0 -37
  193. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  194. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  195. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  196. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  197. package/docs/module_selenium-webdriver_namespace_promise.html +0 -162
  198. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  199. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  200. package/docs/module_selenium-webdriver_net.html +0 -7
  201. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  202. package/docs/module_selenium-webdriver_opera.html +0 -62
  203. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  204. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  205. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  206. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  207. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  208. package/docs/module_selenium-webdriver_proxy.html +0 -28
  209. package/docs/module_selenium-webdriver_remote.html +0 -8
  210. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  211. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  212. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -40
  213. package/docs/module_selenium-webdriver_safari.html +0 -9
  214. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  215. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  216. package/docs/module_selenium-webdriver_testing.html +0 -74
  217. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  218. package/docs/namespace_bot.html +0 -4
  219. package/docs/namespace_bot_json.html +0 -20
  220. package/docs/namespace_bot_response.html +0 -18
  221. package/docs/namespace_bot_userAgent.html +0 -33
  222. package/docs/namespace_webdriver.html +0 -30
  223. package/docs/namespace_webdriver_By.html +0 -56
  224. package/docs/namespace_webdriver_http.html +0 -6
  225. package/docs/namespace_webdriver_logging.html +0 -70
  226. package/docs/namespace_webdriver_promise.html +0 -165
  227. package/docs/namespace_webdriver_stacktrace.html +0 -17
  228. package/docs/namespace_webdriver_testing.html +0 -7
  229. package/docs/namespace_webdriver_testing_assert.html +0 -9
  230. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  231. package/docs/namespace_webdriver_until.html +0 -82
  232. package/docs/source/_base.js.src.html +0 -1
  233. package/docs/source/builder.js.src.html +0 -1
  234. package/docs/source/chrome.js.src.html +0 -1
  235. package/docs/source/error.js.src.html +0 -1
  236. package/docs/source/executors.js.src.html +0 -1
  237. package/docs/source/firefox/binary.js.src.html +0 -1
  238. package/docs/source/firefox/extension.js.src.html +0 -1
  239. package/docs/source/firefox/index.js.src.html +0 -1
  240. package/docs/source/firefox/profile.js.src.html +0 -1
  241. package/docs/source/http/index.js.src.html +0 -1
  242. package/docs/source/http/util.js.src.html +0 -1
  243. package/docs/source/ie.js.src.html +0 -1
  244. package/docs/source/index.js.src.html +0 -1
  245. package/docs/source/io/exec.js.src.html +0 -1
  246. package/docs/source/io/index.js.src.html +0 -1
  247. package/docs/source/lib/atoms/error.js.src.html +0 -1
  248. package/docs/source/lib/atoms/json.js.src.html +0 -1
  249. package/docs/source/lib/atoms/response.js.src.html +0 -1
  250. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  251. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  252. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  253. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  254. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  255. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  256. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  257. package/docs/source/lib/goog/base.js.src.html +0 -1
  258. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  259. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  260. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  261. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  262. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  263. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  264. package/docs/source/lib/goog/deps.js.src.html +0 -1
  265. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  266. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  267. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  268. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  269. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  270. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  271. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  272. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  273. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  274. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  275. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  276. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  277. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  278. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  279. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  280. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  285. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  286. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  287. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  288. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  289. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  290. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  291. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  292. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  293. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  294. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  295. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  296. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  297. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  298. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  299. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  300. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  301. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  302. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  303. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  307. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  308. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  309. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  310. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  311. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  312. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  313. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  314. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  315. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  316. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  317. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  318. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  319. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  320. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  321. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  322. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  323. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  324. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  325. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  326. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  327. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  328. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  329. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  330. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  331. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  332. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  333. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  334. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  335. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  336. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/watchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  348. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  349. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  350. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  351. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  352. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  353. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  354. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  355. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  356. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  357. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  358. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  369. package/docs/source/net/index.js.src.html +0 -1
  370. package/docs/source/net/portprober.js.src.html +0 -1
  371. package/docs/source/opera.js.src.html +0 -1
  372. package/docs/source/phantomjs.js.src.html +0 -1
  373. package/docs/source/proxy.js.src.html +0 -1
  374. package/docs/source/remote/index.js.src.html +0 -1
  375. package/docs/source/safari.js.src.html +0 -1
  376. package/docs/source/testing/assert.js.src.html +0 -1
  377. package/docs/source/testing/index.js.src.html +0 -1
  378. package/docs/types.js +0 -1
  379. package/lib/atoms/error.js +0 -202
  380. package/lib/atoms/json.js +0 -80
  381. package/lib/atoms/response.js +0 -110
  382. package/lib/atoms/userAgent.js +0 -257
  383. package/lib/goog/LICENSE +0 -176
  384. package/lib/goog/array/array.js +0 -1655
  385. package/lib/goog/asserts/asserts.js +0 -365
  386. package/lib/goog/async/freelist.js +0 -88
  387. package/lib/goog/async/nexttick.js +0 -241
  388. package/lib/goog/async/run.js +0 -139
  389. package/lib/goog/async/workqueue.js +0 -139
  390. package/lib/goog/base.js +0 -2547
  391. package/lib/goog/debug/debug.js +0 -653
  392. package/lib/goog/debug/entrypointregistry.js +0 -158
  393. package/lib/goog/debug/error.js +0 -63
  394. package/lib/goog/debug/logbuffer.js +0 -148
  395. package/lib/goog/debug/logger.js +0 -873
  396. package/lib/goog/debug/logrecord.js +0 -242
  397. package/lib/goog/deps.js +0 -151
  398. package/lib/goog/disposable/disposable.js +0 -307
  399. package/lib/goog/disposable/idisposable.js +0 -45
  400. package/lib/goog/dom/browserfeature.js +0 -72
  401. package/lib/goog/dom/dom.js +0 -2995
  402. package/lib/goog/dom/nodetype.js +0 -48
  403. package/lib/goog/dom/safe.js +0 -347
  404. package/lib/goog/dom/tagname.js +0 -160
  405. package/lib/goog/dom/tags.js +0 -42
  406. package/lib/goog/dom/vendor.js +0 -96
  407. package/lib/goog/events/browserevent.js +0 -386
  408. package/lib/goog/events/browserfeature.js +0 -85
  409. package/lib/goog/events/event.js +0 -143
  410. package/lib/goog/events/eventid.js +0 -47
  411. package/lib/goog/events/events.js +0 -984
  412. package/lib/goog/events/eventtarget.js +0 -394
  413. package/lib/goog/events/eventtype.js +0 -233
  414. package/lib/goog/events/keycodes.js +0 -420
  415. package/lib/goog/events/listenable.js +0 -335
  416. package/lib/goog/events/listener.js +0 -131
  417. package/lib/goog/events/listenermap.js +0 -308
  418. package/lib/goog/fs/url.js +0 -105
  419. package/lib/goog/functions/functions.js +0 -332
  420. package/lib/goog/html/safehtml.js +0 -756
  421. package/lib/goog/html/safescript.js +0 -234
  422. package/lib/goog/html/safestyle.js +0 -442
  423. package/lib/goog/html/safestylesheet.js +0 -276
  424. package/lib/goog/html/safeurl.js +0 -431
  425. package/lib/goog/html/trustedresourceurl.js +0 -224
  426. package/lib/goog/html/uncheckedconversions.js +0 -231
  427. package/lib/goog/i18n/bidi.js +0 -908
  428. package/lib/goog/iter/iter.js +0 -1305
  429. package/lib/goog/json/json.js +0 -365
  430. package/lib/goog/labs/testing/assertthat.js +0 -58
  431. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  432. package/lib/goog/labs/testing/matcher.js +0 -80
  433. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  434. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  435. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  436. package/lib/goog/labs/useragent/browser.js +0 -327
  437. package/lib/goog/labs/useragent/engine.js +0 -160
  438. package/lib/goog/labs/useragent/platform.js +0 -160
  439. package/lib/goog/labs/useragent/util.js +0 -148
  440. package/lib/goog/math/box.js +0 -389
  441. package/lib/goog/math/coordinate.js +0 -268
  442. package/lib/goog/math/math.js +0 -451
  443. package/lib/goog/math/rect.js +0 -476
  444. package/lib/goog/math/size.js +0 -227
  445. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  446. package/lib/goog/net/xhrlike.js +0 -124
  447. package/lib/goog/net/xmlhttp.js +0 -246
  448. package/lib/goog/net/xmlhttpfactory.js +0 -67
  449. package/lib/goog/object/object.js +0 -686
  450. package/lib/goog/promise/promise.js +0 -1310
  451. package/lib/goog/promise/resolver.js +0 -48
  452. package/lib/goog/promise/thenable.js +0 -126
  453. package/lib/goog/reflect/reflect.js +0 -78
  454. package/lib/goog/string/const.js +0 -182
  455. package/lib/goog/string/string.js +0 -1565
  456. package/lib/goog/string/typedstring.js +0 -48
  457. package/lib/goog/structs/collection.js +0 -56
  458. package/lib/goog/structs/map.js +0 -456
  459. package/lib/goog/structs/set.js +0 -279
  460. package/lib/goog/structs/structs.js +0 -354
  461. package/lib/goog/style/style.js +0 -2054
  462. package/lib/goog/testing/asserts.js +0 -1265
  463. package/lib/goog/testing/events/events.js +0 -727
  464. package/lib/goog/testing/functionmock.js +0 -176
  465. package/lib/goog/testing/jsunit.js +0 -162
  466. package/lib/goog/testing/loosemock.js +0 -242
  467. package/lib/goog/testing/mock.js +0 -645
  468. package/lib/goog/testing/mockclock.js +0 -617
  469. package/lib/goog/testing/mockcontrol.js +0 -220
  470. package/lib/goog/testing/mockinterface.js +0 -45
  471. package/lib/goog/testing/mockmatchers.js +0 -400
  472. package/lib/goog/testing/objectpropertystring.js +0 -68
  473. package/lib/goog/testing/propertyreplacer.js +0 -245
  474. package/lib/goog/testing/recordfunction.js +0 -215
  475. package/lib/goog/testing/stacktrace.js +0 -594
  476. package/lib/goog/testing/strictmock.js +0 -130
  477. package/lib/goog/testing/testcase.js +0 -1569
  478. package/lib/goog/testing/testrunner.js +0 -440
  479. package/lib/goog/testing/watchers.js +0 -46
  480. package/lib/goog/uri/uri.js +0 -1507
  481. package/lib/goog/uri/utils.js +0 -1116
  482. package/lib/goog/useragent/product.js +0 -175
  483. package/lib/goog/useragent/product_isversion.js +0 -143
  484. package/lib/goog/useragent/useragent.js +0 -538
  485. package/lib/webdriver/actionsequence.js +0 -356
  486. package/lib/webdriver/builder.js +0 -208
  487. package/lib/webdriver/capabilities.js +0 -411
  488. package/lib/webdriver/events.js +0 -179
  489. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  490. package/lib/webdriver/http/corsclient.js +0 -133
  491. package/lib/webdriver/http/http.js +0 -523
  492. package/lib/webdriver/http/xhrclient.js +0 -67
  493. package/lib/webdriver/locators.js +0 -257
  494. package/lib/webdriver/logging.js +0 -347
  495. package/lib/webdriver/promise.js +0 -2609
  496. package/lib/webdriver/serializable.js +0 -41
  497. package/lib/webdriver/session.js +0 -74
  498. package/lib/webdriver/stacktrace.js +0 -619
  499. package/lib/webdriver/test/builder_test.js +0 -53
  500. package/lib/webdriver/test/capabilities_test.js +0 -72
  501. package/lib/webdriver/test/events_test.js +0 -203
  502. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  503. package/lib/webdriver/test/http/http_test.js +0 -428
  504. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  505. package/lib/webdriver/test/locators_test.js +0 -59
  506. package/lib/webdriver/test/logging_test.js +0 -85
  507. package/lib/webdriver/test/promise_error_test.js +0 -719
  508. package/lib/webdriver/test/promise_flow_test.js +0 -1957
  509. package/lib/webdriver/test/promise_generator_test.js +0 -251
  510. package/lib/webdriver/test/promise_test.js +0 -1981
  511. package/lib/webdriver/test/stacktrace_test.js +0 -480
  512. package/lib/webdriver/test/test_bootstrap.js +0 -67
  513. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  514. package/lib/webdriver/test/testing/client_test.js +0 -88
  515. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  516. package/lib/webdriver/test/testutil.js +0 -209
  517. package/lib/webdriver/test/testutil_test.js +0 -104
  518. package/lib/webdriver/test/until_test.js +0 -411
  519. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  520. package/lib/webdriver/test/webdriver_test.js +0 -2369
  521. package/lib/webdriver/testing/asserts.js +0 -487
  522. package/lib/webdriver/testing/client.js +0 -179
  523. package/lib/webdriver/testing/jsunit.js +0 -363
  524. package/lib/webdriver/testing/testcase.js +0 -168
  525. package/lib/webdriver/testing/window.js +0 -244
  526. package/lib/webdriver/touchsequence.js +0 -248
  527. package/lib/webdriver/until.js +0 -412
  528. package/lib/webdriver/webdriver.js +0 -2492
  529. package/test/_base_test.js +0 -129
@@ -22,32 +22,32 @@
22
22
 
23
23
  'use strict';
24
24
 
25
- var AdmZip = require('adm-zip'),
25
+ const AdmZip = require('adm-zip'),
26
+ AdmConstants = require('adm-zip/util/constants'),
26
27
  fs = require('fs'),
27
28
  path = require('path'),
28
- util = require('util'),
29
29
  vm = require('vm');
30
30
 
31
- var Serializable = require('..').Serializable,
32
- promise = require('..').promise,
33
- _base = require('../_base'),
31
+ const isDevMode = require('../lib/devmode'),
32
+ promise = require('../lib/promise'),
33
+ Symbols = require('../lib/symbols'),
34
34
  io = require('../io'),
35
35
  extension = require('./extension');
36
36
 
37
37
 
38
38
  /** @const */
39
- var WEBDRIVER_PREFERENCES_PATH = _base.isDevMode()
39
+ const WEBDRIVER_PREFERENCES_PATH = isDevMode
40
40
  ? path.join(__dirname, '../../../firefox-driver/webdriver.json')
41
41
  : path.join(__dirname, '../lib/firefox/webdriver.json');
42
42
 
43
43
  /** @const */
44
- var WEBDRIVER_EXTENSION_PATH = _base.isDevMode()
44
+ const WEBDRIVER_EXTENSION_PATH = isDevMode
45
45
  ? path.join(__dirname,
46
46
  '../../../../build/javascript/firefox-driver/webdriver.xpi')
47
47
  : path.join(__dirname, '../lib/firefox/webdriver.xpi');
48
48
 
49
49
  /** @const */
50
- var WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com';
50
+ const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com';
51
51
 
52
52
 
53
53
 
@@ -60,8 +60,9 @@ var defaultPreferences = null;
60
60
  */
61
61
  function getDefaultPreferences() {
62
62
  if (!defaultPreferences) {
63
- var contents = fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8');
64
- defaultPreferences = JSON.parse(contents);
63
+ var contents = /** @type {string} */(
64
+ fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8'));
65
+ defaultPreferences = /** @type {!Object} */(JSON.parse(contents));
65
66
  }
66
67
  return defaultPreferences;
67
68
  }
@@ -70,7 +71,7 @@ function getDefaultPreferences() {
70
71
  /**
71
72
  * Parses a user.js file in a Firefox profile directory.
72
73
  * @param {string} f Path to the file to parse.
73
- * @return {!promise.Promise.<!Object>} A promise for the parsed preferences as
74
+ * @return {!promise.Promise<!Object>} A promise for the parsed preferences as
74
75
  * a JSON object. If the file does not exist, an empty object will be
75
76
  * returned.
76
77
  */
@@ -94,38 +95,27 @@ function loadUserPrefs(f) {
94
95
  }
95
96
  });
96
97
 
97
- vm.runInContext(contents, context, f);
98
+ vm.runInContext(/** @type {string} */(contents), context, f);
98
99
  done.fulfill(prefs);
99
100
  });
100
101
  return done.promise;
101
102
  }
102
103
 
103
104
 
104
- /**
105
- * Copies the properties of one object into another.
106
- * @param {!Object} a The destination object.
107
- * @param {!Object} b The source object to apply as a mixin.
108
- */
109
- function mixin(a, b) {
110
- Object.keys(b).forEach(function(key) {
111
- a[key] = b[key];
112
- });
113
- }
114
-
115
105
 
116
106
  /**
117
- * @param {!Object} defaults The default preferences to write. Will be
107
+ * @param {!Object} prefs The default preferences to write. Will be
118
108
  * overridden by user.js preferences in the template directory and the
119
109
  * frozen preferences required by WebDriver.
120
110
  * @param {string} dir Path to the directory write the file to.
121
- * @return {!promise.Promise.<string>} A promise for the profile directory,
111
+ * @return {!promise.Promise<string>} A promise for the profile directory,
122
112
  * to be fulfilled when user preferences have been written.
123
113
  */
124
114
  function writeUserPrefs(prefs, dir) {
125
115
  var userPrefs = path.join(dir, 'user.js');
126
116
  return loadUserPrefs(userPrefs).then(function(overrides) {
127
- mixin(prefs, overrides);
128
- mixin(prefs, getDefaultPreferences()['frozen']);
117
+ Object.assign(prefs, overrides);
118
+ Object.assign(prefs, getDefaultPreferences()['frozen']);
129
119
 
130
120
  var contents = Object.keys(prefs).map(function(key) {
131
121
  return 'user_pref(' + JSON.stringify(key) + ', ' +
@@ -150,54 +140,48 @@ function writeUserPrefs(prefs, dir) {
150
140
  * @param {string} dir The profile directory to install to.
151
141
  * @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of
152
142
  * the default WebDriver extension.
153
- * @return {!promise.Promise.<string>} A promise for the main profile directory
143
+ * @return {!Promise<string>} A promise for the main profile directory
154
144
  * once all extensions have been installed.
155
145
  */
156
146
  function installExtensions(extensions, dir, opt_excludeWebDriverExt) {
157
147
  var hasWebDriver = !!opt_excludeWebDriverExt;
158
148
  var next = 0;
159
149
  var extensionDir = path.join(dir, 'extensions');
160
- var done = promise.defer();
161
-
162
- return io.exists(extensionDir).then(function(exists) {
163
- if (!exists) {
164
- return promise.checkedNodeCall(fs.mkdir, extensionDir);
165
- }
166
- }).then(function() {
167
- installNext();
168
- return done.promise;
169
- });
170
-
171
- function installNext() {
172
- if (!done.isPending()) {
173
- return;
174
- }
175
150
 
176
- if (next >= extensions.length) {
177
- if (hasWebDriver) {
178
- done.fulfill(dir);
151
+ return new Promise(function(fulfill, reject) {
152
+ io.exists(extensionDir).then(function(exists) {
153
+ if (!exists) {
154
+ return promise.checkedNodeCall(fs.mkdir, extensionDir);
155
+ }
156
+ }).then(installNext);
157
+
158
+ function installNext() {
159
+ if (next >= extensions.length) {
160
+ if (hasWebDriver) {
161
+ fulfill(dir);
162
+ } else {
163
+ install(WEBDRIVER_EXTENSION_PATH);
164
+ }
179
165
  } else {
180
- install(WEBDRIVER_EXTENSION_PATH);
166
+ install(extensions[next++]);
181
167
  }
182
- } else {
183
- install(extensions[next++]);
184
168
  }
185
- }
186
169
 
187
- function install(ext) {
188
- extension.install(ext, extensionDir).then(function(id) {
189
- hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME);
190
- installNext();
191
- }, done.reject);
192
- }
170
+ function install(ext) {
171
+ extension.install(ext, extensionDir).then(function(id) {
172
+ hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME);
173
+ installNext();
174
+ }, reject);
175
+ }
176
+ });
193
177
  }
194
178
 
195
179
 
196
180
  /**
197
181
  * Decodes a base64 encoded profile.
198
182
  * @param {string} data The base64 encoded string.
199
- * @return {!promise.Promise.<string>} A promise for the path to the decoded
200
- * profile directory.
183
+ * @return {!Promise<string>} A promise for the path to the decoded profile
184
+ * directory.
201
185
  */
202
186
  function decode(data) {
203
187
  return io.tmpFile().then(function(file) {
@@ -218,209 +202,207 @@ function decode(data) {
218
202
  * Models a Firefox proifle directory for use with the FirefoxDriver. The
219
203
  * {@code Proifle} directory uses an in-memory model until {@link #writeToDisk}
220
204
  * is called.
221
- * @param {string=} opt_dir Path to an existing Firefox profile directory to
222
- * use a template for this profile. If not specified, a blank profile will
223
- * be used.
224
- * @constructor
225
- * @extends {Serializable.<string>}
226
205
  */
227
- var Profile = function(opt_dir) {
228
- Serializable.call(this);
229
-
230
- /** @private {!Object} */
231
- this.preferences_ = {};
232
-
233
- mixin(this.preferences_, getDefaultPreferences()['mutable']);
234
- mixin(this.preferences_, getDefaultPreferences()['frozen']);
235
-
236
- /** @private {boolean} */
237
- this.nativeEventsEnabled_ = true;
238
-
239
- /** @private {(string|undefined)} */
240
- this.template_ = opt_dir;
241
-
242
- /** @private {number} */
243
- this.port_ = 0;
244
-
245
- /** @private {!Array.<string>} */
246
- this.extensions_ = [];
247
- };
248
- util.inherits(Profile, Serializable);
249
-
250
-
251
- /**
252
- * Registers an extension to be included with this profile.
253
- * @param {string} extension Path to the extension to include, as either an
254
- * unpacked extension directory or the path to a xpi file.
255
- */
256
- Profile.prototype.addExtension = function(extension) {
257
- this.extensions_.push(extension);
258
- };
259
-
260
-
261
- /**
262
- * Sets a desired preference for this profile.
263
- * @param {string} key The preference key.
264
- * @param {(string|number|boolean)} value The preference value.
265
- * @throws {Error} If attempting to set a frozen preference.
266
- */
267
- Profile.prototype.setPreference = function(key, value) {
268
- var frozen = getDefaultPreferences()['frozen'];
269
- if (frozen.hasOwnProperty(key) && frozen[key] !== value) {
270
- throw Error('You may not set ' + key + '=' + JSON.stringify(value)
271
- + '; value is frozen for proper WebDriver functionality ('
272
- + key + '=' + JSON.stringify(frozen[key]) + ')');
206
+ class Profile {
207
+ /**
208
+ * @param {string=} opt_dir Path to an existing Firefox profile directory to
209
+ * use a template for this profile. If not specified, a blank profile will
210
+ * be used.
211
+ */
212
+ constructor(opt_dir) {
213
+ /** @private {!Object} */
214
+ this.preferences_ = {};
215
+
216
+ Object.assign(this.preferences_, getDefaultPreferences()['mutable']);
217
+ Object.assign(this.preferences_, getDefaultPreferences()['frozen']);
218
+
219
+ /** @private {boolean} */
220
+ this.nativeEventsEnabled_ = true;
221
+
222
+ /** @private {(string|undefined)} */
223
+ this.template_ = opt_dir;
224
+
225
+ /** @private {number} */
226
+ this.port_ = 0;
227
+
228
+ /** @private {!Array<string>} */
229
+ this.extensions_ = [];
273
230
  }
274
- this.preferences_[key] = value;
275
- };
276
-
277
-
278
- /**
279
- * Returns the currently configured value of a profile preference. This does
280
- * not include any defaults defined in the profile's template directory user.js
281
- * file (if a template were specified on construction).
282
- * @param {string} key The desired preference.
283
- * @return {(string|number|boolean|undefined)} The current value of the
284
- * requested preference.
285
- */
286
- Profile.prototype.getPreference = function(key) {
287
- return this.preferences_[key];
288
- };
289
231
 
232
+ /**
233
+ * Registers an extension to be included with this profile.
234
+ * @param {string} extension Path to the extension to include, as either an
235
+ * unpacked extension directory or the path to a xpi file.
236
+ */
237
+ addExtension(extension) {
238
+ this.extensions_.push(extension);
239
+ }
290
240
 
291
- /**
292
- * @return {number} The port this profile is currently configured to use, or
293
- * 0 if the port will be selected at random when the profile is written
294
- * to disk.
295
- */
296
- Profile.prototype.getPort = function() {
297
- return this.port_;
298
- };
299
-
300
-
301
- /**
302
- * Sets the port to use for the WebDriver extension loaded by this profile.
303
- * @param {number} port The desired port, or 0 to use any free port.
304
- */
305
- Profile.prototype.setPort = function(port) {
306
- this.port_ = port;
307
- };
308
-
309
-
310
- /**
311
- * @return {boolean} Whether the FirefoxDriver is configured to automatically
312
- * accept untrusted SSL certificates.
313
- */
314
- Profile.prototype.acceptUntrustedCerts = function() {
315
- return !!this.preferences_['webdriver_accept_untrusted_certs'];
316
- };
317
-
318
-
319
- /**
320
- * Sets whether the FirefoxDriver should automatically accept untrusted SSL
321
- * certificates.
322
- * @param {boolean} value .
323
- */
324
- Profile.prototype.setAcceptUntrustedCerts = function(value) {
325
- this.preferences_['webdriver_accept_untrusted_certs'] = !!value;
326
- };
327
-
241
+ /**
242
+ * Sets a desired preference for this profile.
243
+ * @param {string} key The preference key.
244
+ * @param {(string|number|boolean)} value The preference value.
245
+ * @throws {Error} If attempting to set a frozen preference.
246
+ */
247
+ setPreference(key, value) {
248
+ var frozen = getDefaultPreferences()['frozen'];
249
+ if (frozen.hasOwnProperty(key) && frozen[key] !== value) {
250
+ throw Error('You may not set ' + key + '=' + JSON.stringify(value)
251
+ + '; value is frozen for proper WebDriver functionality ('
252
+ + key + '=' + JSON.stringify(frozen[key]) + ')');
253
+ }
254
+ this.preferences_[key] = value;
255
+ }
328
256
 
329
- /**
330
- * Sets whether to assume untrusted certificates come from untrusted issuers.
331
- * @param {boolean} value .
332
- */
333
- Profile.prototype.setAssumeUntrustedCertIssuer = function(value) {
334
- this.preferences_['webdriver_assume_untrusted_issuer'] = !!value;
335
- };
257
+ /**
258
+ * Returns the currently configured value of a profile preference. This does
259
+ * not include any defaults defined in the profile's template directory user.js
260
+ * file (if a template were specified on construction).
261
+ * @param {string} key The desired preference.
262
+ * @return {(string|number|boolean|undefined)} The current value of the
263
+ * requested preference.
264
+ */
265
+ getPreference(key) {
266
+ return this.preferences_[key];
267
+ }
336
268
 
269
+ /**
270
+ * Specifies which host the driver should listen for commands on. If not
271
+ * specified, the driver will default to "localhost". This option should be
272
+ * specified when "localhost" is not mapped to the loopback address
273
+ * (127.0.0.1) in `/etc/hosts`.
274
+ *
275
+ * @param {string} host the host the driver should listen for commands on
276
+ */
277
+ setHost(host) {
278
+ this.preferences_['webdriver_firefox_allowed_hosts'] = host;
279
+ }
337
280
 
338
- /**
339
- * @return {boolean} Whether to assume untrusted certs come from untrusted
340
- * issuers.
341
- */
342
- Profile.prototype.assumeUntrustedCertIssuer = function() {
343
- return !!this.preferences_['webdriver_assume_untrusted_issuer'];
344
- };
281
+ /**
282
+ * @return {number} The port this profile is currently configured to use, or
283
+ * 0 if the port will be selected at random when the profile is written
284
+ * to disk.
285
+ */
286
+ getPort() {
287
+ return this.port_;
288
+ }
345
289
 
290
+ /**
291
+ * Sets the port to use for the WebDriver extension loaded by this profile.
292
+ * @param {number} port The desired port, or 0 to use any free port.
293
+ */
294
+ setPort(port) {
295
+ this.port_ = port;
296
+ }
346
297
 
347
- /**
348
- * Sets whether to use native events with this profile.
349
- * @param {boolean} enabled .
350
- */
351
- Profile.prototype.setNativeEventsEnabled = function(enabled) {
352
- this.nativeEventsEnabled_ = enabled;
353
- };
298
+ /**
299
+ * @return {boolean} Whether the FirefoxDriver is configured to automatically
300
+ * accept untrusted SSL certificates.
301
+ */
302
+ acceptUntrustedCerts() {
303
+ return !!this.preferences_['webdriver_accept_untrusted_certs'];
304
+ }
354
305
 
306
+ /**
307
+ * Sets whether the FirefoxDriver should automatically accept untrusted SSL
308
+ * certificates.
309
+ * @param {boolean} value .
310
+ */
311
+ setAcceptUntrustedCerts(value) {
312
+ this.preferences_['webdriver_accept_untrusted_certs'] = !!value;
313
+ }
355
314
 
356
- /**
357
- * Returns whether native events are enabled in this profile.
358
- * @return {boolean} .
359
- */
360
- Profile.prototype.nativeEventsEnabled = function() {
361
- return this.nativeEventsEnabled_;
362
- };
315
+ /**
316
+ * Sets whether to assume untrusted certificates come from untrusted issuers.
317
+ * @param {boolean} value .
318
+ */
319
+ setAssumeUntrustedCertIssuer(value) {
320
+ this.preferences_['webdriver_assume_untrusted_issuer'] = !!value;
321
+ }
363
322
 
323
+ /**
324
+ * @return {boolean} Whether to assume untrusted certs come from untrusted
325
+ * issuers.
326
+ */
327
+ assumeUntrustedCertIssuer() {
328
+ return !!this.preferences_['webdriver_assume_untrusted_issuer'];
329
+ }
364
330
 
365
- /**
366
- * Writes this profile to disk.
367
- * @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver
368
- * extension from the generated profile. Used to reduce the size of an
369
- * {@link #encode() encoded profile} since the server will always install
370
- * the extension itself.
371
- * @return {!promise.Promise.<string>} A promise for the path to the new
372
- * profile directory.
373
- */
374
- Profile.prototype.writeToDisk = function(opt_excludeWebDriverExt) {
375
- var profileDir = io.tmpDir();
376
- if (this.template_) {
377
- profileDir = profileDir.then(function(dir) {
378
- return io.copyDir(
379
- this.template_, dir, /(parent\.lock|lock|\.parentlock)/);
380
- }.bind(this));
331
+ /**
332
+ * Sets whether to use native events with this profile.
333
+ * @param {boolean} enabled .
334
+ */
335
+ setNativeEventsEnabled(enabled) {
336
+ this.nativeEventsEnabled_ = enabled;
381
337
  }
382
338
 
383
- // Freeze preferences for async operations.
384
- var prefs = {};
385
- mixin(prefs, this.preferences_);
339
+ /**
340
+ * Returns whether native events are enabled in this profile.
341
+ * @return {boolean} .
342
+ */
343
+ nativeEventsEnabled() {
344
+ return this.nativeEventsEnabled_;
345
+ }
386
346
 
387
- // Freeze extensions for async operations.
388
- var extensions = this.extensions_.concat();
347
+ /**
348
+ * Writes this profile to disk.
349
+ * @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver
350
+ * extension from the generated profile. Used to reduce the size of an
351
+ * {@link #encode() encoded profile} since the server will always install
352
+ * the extension itself.
353
+ * @return {!Promise<string>} A promise for the path to the new profile
354
+ * directory.
355
+ */
356
+ writeToDisk(opt_excludeWebDriverExt) {
357
+ var profileDir = io.tmpDir();
358
+ if (this.template_) {
359
+ profileDir = profileDir.then(function(dir) {
360
+ return io.copyDir(
361
+ /** @type {string} */(this.template_),
362
+ dir, /(parent\.lock|lock|\.parentlock)/);
363
+ }.bind(this));
364
+ }
389
365
 
390
- return profileDir.then(function(dir) {
391
- return writeUserPrefs(prefs, dir);
392
- }).then(function(dir) {
393
- return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
394
- });
395
- };
366
+ // Freeze preferences for async operations.
367
+ var prefs = {};
368
+ Object.assign(prefs, this.preferences_);
396
369
 
370
+ // Freeze extensions for async operations.
371
+ var extensions = this.extensions_.concat();
397
372
 
398
- /**
399
- * Encodes this profile as a zipped, base64 encoded directory.
400
- * @return {!promise.Promise.<string>} A promise for the encoded profile.
401
- */
402
- Profile.prototype.encode = function() {
403
- return this.writeToDisk(true).then(function(dir) {
404
- var zip = new AdmZip();
405
- zip.addLocalFolder(dir, '');
406
- return io.tmpFile().then(function(file) {
407
- zip.writeZip(file); // Sync! Why oh why :-(
408
- return promise.checkedNodeCall(fs.readFile, file);
373
+ return profileDir.then(function(dir) {
374
+ return writeUserPrefs(prefs, dir);
375
+ }).then(function(dir) {
376
+ return installExtensions(extensions, dir, !!opt_excludeWebDriverExt);
409
377
  });
410
- }).then(function(data) {
411
- return new Buffer(data).toString('base64');
412
- });
413
- };
378
+ }
414
379
 
380
+ /**
381
+ * Encodes this profile as a zipped, base64 encoded directory.
382
+ * @return {!Promise<string>} A promise for the encoded profile.
383
+ */
384
+ encode() {
385
+ return this.writeToDisk(true).then(function(dir) {
386
+ var zip = new AdmZip();
387
+ zip.addLocalFolder(dir, '');
388
+ zip.getEntries()[0].header.method = AdmConstants.STORED;
389
+ return io.tmpFile().then(function(file) {
390
+ zip.writeZip(file); // Sync! Why oh why :-(
391
+ return promise.checkedNodeCall(fs.readFile, file);
392
+ });
393
+ }).then(function(data) {
394
+ return new Buffer(data).toString('base64');
395
+ });
396
+ }
415
397
 
416
- /**
417
- * Encodes this profile as a zipped, base64 encoded directory.
418
- * @return {!promise.Promise.<string>} A promise for the encoded profile.
419
- * @override
420
- */
421
- Profile.prototype.serialize = function() {
422
- return this.encode();
423
- };
398
+ /**
399
+ * Encodes this profile as a zipped, base64 encoded directory.
400
+ * @return {!Promise<string>} A promise for the encoded profile.
401
+ */
402
+ [Symbols.serialize]() {
403
+ return this.encode();
404
+ }
405
+ }
424
406
 
425
407
 
426
408
  // PUBLIC API