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