selenium-webdriver 2.48.2 → 2.53.3

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 (534) hide show
  1. package/CHANGES.md +116 -0
  2. package/NOTICE +1 -1
  3. package/README.md +59 -9
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +9 -6
  8. package/example/google_search.js +1 -1
  9. package/example/google_search_generator.js +2 -4
  10. package/example/logging.js +6 -2
  11. package/example/sample.js +21 -0
  12. package/executors.js +11 -27
  13. package/firefox/binary.js +149 -98
  14. package/firefox/extension.js +15 -19
  15. package/firefox/index.js +256 -163
  16. package/firefox/profile.js +223 -243
  17. package/http/index.js +487 -81
  18. package/http/util.js +40 -36
  19. package/ie.js +288 -309
  20. package/index.js +34 -125
  21. package/io/exec.js +58 -39
  22. package/io/index.js +72 -60
  23. package/lib/README +4 -0
  24. package/lib/actions.js +596 -0
  25. package/lib/by.js +277 -0
  26. package/lib/capabilities.js +450 -0
  27. package/lib/{webdriver/command.js → command.js} +91 -72
  28. package/lib/{webdriver/button.js → devmode.js} +13 -8
  29. package/lib/error.js +690 -0
  30. package/lib/events.js +212 -0
  31. package/lib/firefox/amd64/libnoblur64.so +0 -0
  32. package/lib/firefox/i386/libnoblur.so +0 -0
  33. package/lib/firefox/webdriver.json +5 -1
  34. package/lib/firefox/webdriver.xpi +0 -0
  35. package/lib/{webdriver/key.js → input.js} +84 -2
  36. package/lib/logging.js +670 -0
  37. package/lib/{webdriver/promise.js → promise.js} +817 -644
  38. package/lib/safari/client.js +266 -214
  39. package/lib/session.js +80 -0
  40. package/lib/{webdriver/serializable.js → symbols.js} +16 -19
  41. package/lib/test/build.js +4 -4
  42. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  43. package/lib/test/data/click_tests/overlapping_elements.html +15 -4
  44. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  45. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  46. package/lib/test/data/hidden_partially.html +45 -0
  47. package/lib/test/data/readOnlyPage.html +1 -1
  48. package/lib/test/data/selectPage.html +18 -2
  49. package/lib/test/fileserver.js +3 -4
  50. package/lib/test/index.js +7 -3
  51. package/lib/test/resources.js +1 -1
  52. package/lib/until.js +376 -0
  53. package/lib/webdriver.js +2440 -0
  54. package/net/index.js +4 -0
  55. package/net/portprober.js +16 -12
  56. package/opera.js +295 -314
  57. package/package.json +6 -5
  58. package/phantomjs.js +144 -147
  59. package/proxy.js +10 -6
  60. package/remote/index.js +289 -238
  61. package/safari.js +326 -311
  62. package/test/chrome/options_test.js +11 -9
  63. package/test/element_finding_test.js +51 -13
  64. package/test/execute_script_test.js +17 -3
  65. package/test/firefox/firefox_test.js +0 -32
  66. package/test/http/http_test.js +671 -61
  67. package/test/http/util_test.js +25 -23
  68. package/test/io_test.js +67 -1
  69. package/test/lib/by_test.js +139 -0
  70. package/test/lib/capabilities_test.js +111 -0
  71. package/test/lib/error_test.js +325 -0
  72. package/test/lib/events_test.js +177 -0
  73. package/test/lib/logging_test.js +272 -0
  74. package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
  75. package/test/lib/promise_error_test.js +808 -0
  76. package/test/lib/promise_flow_test.js +2282 -0
  77. package/test/lib/promise_generator_test.js +308 -0
  78. package/test/lib/promise_test.js +996 -0
  79. package/test/lib/testutil.js +90 -0
  80. package/test/lib/until_test.js +400 -0
  81. package/test/lib/webdriver_test.js +2157 -0
  82. package/test/page_loading_test.js +7 -9
  83. package/test/remote_test.js +50 -3
  84. package/test/session_test.js +53 -0
  85. package/test/stale_element_test.js +2 -2
  86. package/test/testing/assert_test.js +374 -0
  87. package/test/testing/index_test.js +9 -11
  88. package/testing/assert.js +334 -17
  89. package/testing/index.js +12 -2
  90. package/_base.js +0 -200
  91. package/docs/Changes.html +0 -356
  92. package/docs/class_bot_Error.html +0 -15
  93. package/docs/class_webdriver_ActionSequence.html +0 -115
  94. package/docs/class_webdriver_Alert.html +0 -24
  95. package/docs/class_webdriver_AlertPromise.html +0 -92
  96. package/docs/class_webdriver_Capabilities.html +0 -60
  97. package/docs/class_webdriver_Command.html +0 -15
  98. package/docs/class_webdriver_EventEmitter.html +0 -35
  99. package/docs/class_webdriver_FileDetector.html +0 -21
  100. package/docs/class_webdriver_Locator.html +0 -12
  101. package/docs/class_webdriver_Serializable.html +0 -9
  102. package/docs/class_webdriver_Session.html +0 -13
  103. package/docs/class_webdriver_TouchSequence.html +0 -49
  104. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  105. package/docs/class_webdriver_WebDriver.html +0 -313
  106. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  107. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  108. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  109. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  110. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  111. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  112. package/docs/class_webdriver_WebElement.html +0 -223
  113. package/docs/class_webdriver_WebElementPromise.html +0 -274
  114. package/docs/class_webdriver_http_Executor.html +0 -22
  115. package/docs/class_webdriver_http_Request.html +0 -12
  116. package/docs/class_webdriver_http_Response.html +0 -13
  117. package/docs/class_webdriver_logging_Entry.html +0 -15
  118. package/docs/class_webdriver_logging_Level.html +0 -55
  119. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  120. package/docs/class_webdriver_logging_Logger.html +0 -119
  121. package/docs/class_webdriver_logging_Preferences.html +0 -8
  122. package/docs/class_webdriver_promise_CancellationError.html +0 -17
  123. package/docs/class_webdriver_promise_ControlFlow.html +0 -153
  124. package/docs/class_webdriver_promise_Deferred.html +0 -84
  125. package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
  126. package/docs/class_webdriver_promise_Promise.html +0 -75
  127. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  128. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  129. package/docs/class_webdriver_testing_Assertion.html +0 -99
  130. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  131. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  132. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  133. package/docs/class_webdriver_until_Condition.html +0 -7
  134. package/docs/dossier.css +0 -1
  135. package/docs/dossier.js +0 -86
  136. package/docs/enum_bot_ErrorCode.html +0 -3
  137. package/docs/enum_bot_Error_State.html +0 -2
  138. package/docs/enum_webdriver_Browser.html +0 -2
  139. package/docs/enum_webdriver_Button.html +0 -2
  140. package/docs/enum_webdriver_Capability.html +0 -33
  141. package/docs/enum_webdriver_CommandName.html +0 -3
  142. package/docs/enum_webdriver_Key.html +0 -12
  143. package/docs/enum_webdriver_logging_Type.html +0 -6
  144. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  145. package/docs/index.html +0 -125
  146. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  147. package/docs/interface_webdriver_http_Client.html +0 -10
  148. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  149. package/docs/module_selenium-webdriver.html +0 -23
  150. package/docs/module_selenium-webdriver__base.html +0 -23
  151. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  152. package/docs/module_selenium-webdriver_builder.html +0 -2
  153. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  154. package/docs/module_selenium-webdriver_chrome.html +0 -90
  155. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  156. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  157. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  158. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  159. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  160. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  161. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  162. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  163. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  164. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  165. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  166. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  167. package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
  168. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
  169. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  170. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  171. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  172. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  173. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  174. package/docs/module_selenium-webdriver_error.html +0 -4
  175. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  176. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  177. package/docs/module_selenium-webdriver_executors.html +0 -10
  178. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  179. package/docs/module_selenium-webdriver_firefox.html +0 -68
  180. package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
  181. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
  182. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
  183. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  184. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  185. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  186. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  187. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  188. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  189. package/docs/module_selenium-webdriver_http.html +0 -9
  190. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  191. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  192. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  193. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  194. package/docs/module_selenium-webdriver_http_util.html +0 -17
  195. package/docs/module_selenium-webdriver_ie.html +0 -11
  196. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  197. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  198. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  199. package/docs/module_selenium-webdriver_io.html +0 -37
  200. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  201. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  202. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  203. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  204. package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
  205. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  206. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  207. package/docs/module_selenium-webdriver_net.html +0 -7
  208. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  209. package/docs/module_selenium-webdriver_opera.html +0 -62
  210. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  211. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  212. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  213. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  214. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  215. package/docs/module_selenium-webdriver_proxy.html +0 -28
  216. package/docs/module_selenium-webdriver_remote.html +0 -8
  217. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  218. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  219. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
  220. package/docs/module_selenium-webdriver_safari.html +0 -9
  221. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  222. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  223. package/docs/module_selenium-webdriver_testing.html +0 -74
  224. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  225. package/docs/namespace_bot.html +0 -4
  226. package/docs/namespace_bot_json.html +0 -20
  227. package/docs/namespace_bot_response.html +0 -18
  228. package/docs/namespace_bot_userAgent.html +0 -33
  229. package/docs/namespace_webdriver.html +0 -30
  230. package/docs/namespace_webdriver_By.html +0 -56
  231. package/docs/namespace_webdriver_http.html +0 -6
  232. package/docs/namespace_webdriver_logging.html +0 -70
  233. package/docs/namespace_webdriver_promise.html +0 -688
  234. package/docs/namespace_webdriver_stacktrace.html +0 -17
  235. package/docs/namespace_webdriver_testing.html +0 -7
  236. package/docs/namespace_webdriver_testing_assert.html +0 -9
  237. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  238. package/docs/namespace_webdriver_until.html +0 -82
  239. package/docs/source/_base.js.src.html +0 -1
  240. package/docs/source/builder.js.src.html +0 -1
  241. package/docs/source/chrome.js.src.html +0 -1
  242. package/docs/source/error.js.src.html +0 -1
  243. package/docs/source/executors.js.src.html +0 -1
  244. package/docs/source/firefox/binary.js.src.html +0 -1
  245. package/docs/source/firefox/extension.js.src.html +0 -1
  246. package/docs/source/firefox/index.js.src.html +0 -1
  247. package/docs/source/firefox/profile.js.src.html +0 -1
  248. package/docs/source/http/index.js.src.html +0 -1
  249. package/docs/source/http/util.js.src.html +0 -1
  250. package/docs/source/ie.js.src.html +0 -1
  251. package/docs/source/index.js.src.html +0 -1
  252. package/docs/source/io/exec.js.src.html +0 -1
  253. package/docs/source/io/index.js.src.html +0 -1
  254. package/docs/source/lib/atoms/error.js.src.html +0 -1
  255. package/docs/source/lib/atoms/json.js.src.html +0 -1
  256. package/docs/source/lib/atoms/response.js.src.html +0 -1
  257. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  258. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  259. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  260. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  261. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  262. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  263. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  264. package/docs/source/lib/goog/base.js.src.html +0 -1
  265. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  266. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  267. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  268. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  269. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  270. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  271. package/docs/source/lib/goog/deps.js.src.html +0 -1
  272. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  273. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  274. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  275. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  276. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  277. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  278. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  279. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  280. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  285. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  286. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  287. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  288. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  289. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  290. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  291. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  292. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  293. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  294. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  295. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  296. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  297. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  298. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  299. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  300. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  301. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  302. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  303. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  307. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  308. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  309. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  310. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  311. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  312. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  313. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  314. package/docs/source/lib/goog/log/log.js.src.html +0 -1
  315. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  316. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  317. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  318. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  319. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  320. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  321. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  322. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  323. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  324. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  325. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  326. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  327. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  328. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  329. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  330. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  331. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  332. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  333. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  334. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  335. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  336. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  348. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  349. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  350. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  351. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  352. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  353. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  354. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  355. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  356. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  357. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  358. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  369. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  370. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  371. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  372. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  373. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  374. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  375. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  376. package/docs/source/net/index.js.src.html +0 -1
  377. package/docs/source/net/portprober.js.src.html +0 -1
  378. package/docs/source/opera.js.src.html +0 -1
  379. package/docs/source/phantomjs.js.src.html +0 -1
  380. package/docs/source/proxy.js.src.html +0 -1
  381. package/docs/source/remote/index.js.src.html +0 -1
  382. package/docs/source/safari.js.src.html +0 -1
  383. package/docs/source/testing/assert.js.src.html +0 -1
  384. package/docs/source/testing/index.js.src.html +0 -1
  385. package/docs/types.js +0 -1
  386. package/lib/atoms/error.js +0 -202
  387. package/lib/atoms/json.js +0 -80
  388. package/lib/atoms/response.js +0 -110
  389. package/lib/atoms/userAgent.js +0 -257
  390. package/lib/goog/LICENSE +0 -176
  391. package/lib/goog/array/array.js +0 -1654
  392. package/lib/goog/asserts/asserts.js +0 -365
  393. package/lib/goog/async/freelist.js +0 -88
  394. package/lib/goog/async/nexttick.js +0 -241
  395. package/lib/goog/async/run.js +0 -133
  396. package/lib/goog/async/workqueue.js +0 -139
  397. package/lib/goog/base.js +0 -2548
  398. package/lib/goog/debug/debug.js +0 -653
  399. package/lib/goog/debug/entrypointregistry.js +0 -158
  400. package/lib/goog/debug/error.js +0 -63
  401. package/lib/goog/debug/logbuffer.js +0 -148
  402. package/lib/goog/debug/logger.js +0 -873
  403. package/lib/goog/debug/logrecord.js +0 -242
  404. package/lib/goog/deps.js +0 -151
  405. package/lib/goog/disposable/disposable.js +0 -307
  406. package/lib/goog/disposable/idisposable.js +0 -45
  407. package/lib/goog/dom/browserfeature.js +0 -72
  408. package/lib/goog/dom/dom.js +0 -2991
  409. package/lib/goog/dom/nodetype.js +0 -48
  410. package/lib/goog/dom/safe.js +0 -347
  411. package/lib/goog/dom/tagname.js +0 -160
  412. package/lib/goog/dom/tags.js +0 -41
  413. package/lib/goog/dom/vendor.js +0 -96
  414. package/lib/goog/events/browserevent.js +0 -400
  415. package/lib/goog/events/browserfeature.js +0 -85
  416. package/lib/goog/events/event.js +0 -143
  417. package/lib/goog/events/eventid.js +0 -47
  418. package/lib/goog/events/events.js +0 -984
  419. package/lib/goog/events/eventtarget.js +0 -394
  420. package/lib/goog/events/eventtype.js +0 -237
  421. package/lib/goog/events/keycodes.js +0 -427
  422. package/lib/goog/events/listenable.js +0 -335
  423. package/lib/goog/events/listener.js +0 -131
  424. package/lib/goog/events/listenermap.js +0 -308
  425. package/lib/goog/fs/url.js +0 -109
  426. package/lib/goog/functions/functions.js +0 -442
  427. package/lib/goog/html/safehtml.js +0 -757
  428. package/lib/goog/html/safescript.js +0 -234
  429. package/lib/goog/html/safestyle.js +0 -442
  430. package/lib/goog/html/safestylesheet.js +0 -276
  431. package/lib/goog/html/safeurl.js +0 -398
  432. package/lib/goog/html/trustedresourceurl.js +0 -224
  433. package/lib/goog/html/uncheckedconversions.js +0 -232
  434. package/lib/goog/i18n/bidi.js +0 -908
  435. package/lib/goog/iter/iter.js +0 -1302
  436. package/lib/goog/json/json.js +0 -363
  437. package/lib/goog/labs/testing/assertthat.js +0 -58
  438. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  439. package/lib/goog/labs/testing/matcher.js +0 -80
  440. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  441. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  442. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  443. package/lib/goog/labs/useragent/browser.js +0 -341
  444. package/lib/goog/labs/useragent/engine.js +0 -160
  445. package/lib/goog/labs/useragent/platform.js +0 -160
  446. package/lib/goog/labs/useragent/util.js +0 -148
  447. package/lib/goog/log/log.js +0 -197
  448. package/lib/goog/math/box.js +0 -398
  449. package/lib/goog/math/coordinate.js +0 -268
  450. package/lib/goog/math/math.js +0 -451
  451. package/lib/goog/math/rect.js +0 -476
  452. package/lib/goog/math/size.js +0 -227
  453. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  454. package/lib/goog/net/xhrlike.js +0 -124
  455. package/lib/goog/net/xmlhttp.js +0 -246
  456. package/lib/goog/net/xmlhttpfactory.js +0 -67
  457. package/lib/goog/object/object.js +0 -686
  458. package/lib/goog/promise/promise.js +0 -1350
  459. package/lib/goog/promise/resolver.js +0 -48
  460. package/lib/goog/promise/thenable.js +0 -126
  461. package/lib/goog/reflect/reflect.js +0 -77
  462. package/lib/goog/string/const.js +0 -182
  463. package/lib/goog/string/string.js +0 -1599
  464. package/lib/goog/string/typedstring.js +0 -48
  465. package/lib/goog/structs/collection.js +0 -56
  466. package/lib/goog/structs/map.js +0 -457
  467. package/lib/goog/structs/set.js +0 -279
  468. package/lib/goog/structs/structs.js +0 -354
  469. package/lib/goog/style/style.js +0 -2037
  470. package/lib/goog/testing/asserts.js +0 -1278
  471. package/lib/goog/testing/events/events.js +0 -767
  472. package/lib/goog/testing/functionmock.js +0 -175
  473. package/lib/goog/testing/jsunit.js +0 -162
  474. package/lib/goog/testing/loosemock.js +0 -242
  475. package/lib/goog/testing/mock.js +0 -645
  476. package/lib/goog/testing/mockclock.js +0 -606
  477. package/lib/goog/testing/mockcontrol.js +0 -220
  478. package/lib/goog/testing/mockinterface.js +0 -45
  479. package/lib/goog/testing/mockmatchers.js +0 -400
  480. package/lib/goog/testing/objectpropertystring.js +0 -68
  481. package/lib/goog/testing/propertyreplacer.js +0 -262
  482. package/lib/goog/testing/recordfunction.js +0 -215
  483. package/lib/goog/testing/stacktrace.js +0 -594
  484. package/lib/goog/testing/strictmock.js +0 -130
  485. package/lib/goog/testing/testcase.js +0 -1629
  486. package/lib/goog/testing/testrunner.js +0 -440
  487. package/lib/goog/uri/uri.js +0 -1524
  488. package/lib/goog/uri/utils.js +0 -1064
  489. package/lib/goog/useragent/product.js +0 -183
  490. package/lib/goog/useragent/product_isversion.js +0 -144
  491. package/lib/goog/useragent/useragent.js +0 -572
  492. package/lib/webdriver/actionsequence.js +0 -356
  493. package/lib/webdriver/builder.js +0 -207
  494. package/lib/webdriver/capabilities.js +0 -412
  495. package/lib/webdriver/events.js +0 -179
  496. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  497. package/lib/webdriver/http/corsclient.js +0 -133
  498. package/lib/webdriver/http/http.js +0 -525
  499. package/lib/webdriver/http/xhrclient.js +0 -67
  500. package/lib/webdriver/locators.js +0 -257
  501. package/lib/webdriver/logging.js +0 -347
  502. package/lib/webdriver/session.js +0 -74
  503. package/lib/webdriver/stacktrace.js +0 -619
  504. package/lib/webdriver/test/builder_test.js +0 -53
  505. package/lib/webdriver/test/capabilities_test.js +0 -72
  506. package/lib/webdriver/test/events_test.js +0 -203
  507. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  508. package/lib/webdriver/test/http/http_test.js +0 -428
  509. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  510. package/lib/webdriver/test/locators_test.js +0 -59
  511. package/lib/webdriver/test/logging_test.js +0 -85
  512. package/lib/webdriver/test/promise_error_test.js +0 -892
  513. package/lib/webdriver/test/promise_flow_test.js +0 -2365
  514. package/lib/webdriver/test/promise_generator_test.js +0 -323
  515. package/lib/webdriver/test/promise_test.js +0 -2012
  516. package/lib/webdriver/test/stacktrace_test.js +0 -480
  517. package/lib/webdriver/test/test_bootstrap.js +0 -67
  518. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  519. package/lib/webdriver/test/testing/client_test.js +0 -88
  520. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  521. package/lib/webdriver/test/testutil.js +0 -209
  522. package/lib/webdriver/test/testutil_test.js +0 -104
  523. package/lib/webdriver/test/until_test.js +0 -411
  524. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  525. package/lib/webdriver/test/webdriver_test.js +0 -2369
  526. package/lib/webdriver/testing/asserts.js +0 -487
  527. package/lib/webdriver/testing/client.js +0 -179
  528. package/lib/webdriver/testing/jsunit.js +0 -363
  529. package/lib/webdriver/testing/testcase.js +0 -168
  530. package/lib/webdriver/testing/window.js +0 -244
  531. package/lib/webdriver/touchsequence.js +0 -248
  532. package/lib/webdriver/until.js +0 -412
  533. package/lib/webdriver/webdriver.js +0 -2511
  534. package/test/_base_test.js +0 -129
@@ -1,276 +0,0 @@
1
- // Copyright 2014 The Closure Library Authors. All Rights Reserved.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS-IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- /**
16
- * @fileoverview The SafeStyleSheet type and its builders.
17
- *
18
- * TODO(xtof): Link to document stating type contract.
19
- */
20
-
21
- goog.provide('goog.html.SafeStyleSheet');
22
-
23
- goog.require('goog.array');
24
- goog.require('goog.asserts');
25
- goog.require('goog.string');
26
- goog.require('goog.string.Const');
27
- goog.require('goog.string.TypedString');
28
-
29
-
30
-
31
- /**
32
- * A string-like object which represents a CSS style sheet and that carries the
33
- * security type contract that its value, as a string, will not cause untrusted
34
- * script execution (XSS) when evaluated as CSS in a browser.
35
- *
36
- * Instances of this type must be created via the factory method
37
- * {@code goog.html.SafeStyleSheet.fromConstant} and not by invoking its
38
- * constructor. The constructor intentionally takes no parameters and the type
39
- * is immutable; hence only a default instance corresponding to the empty string
40
- * can be obtained via constructor invocation.
41
- *
42
- * A SafeStyleSheet's string representation can safely be interpolated as the
43
- * content of a style element within HTML. The SafeStyleSheet string should
44
- * not be escaped before interpolation.
45
- *
46
- * Values of this type must be composable, i.e. for any two values
47
- * {@code styleSheet1} and {@code styleSheet2} of this type,
48
- * {@code goog.html.SafeStyleSheet.unwrap(styleSheet1) +
49
- * goog.html.SafeStyleSheet.unwrap(styleSheet2)} must itself be a value that
50
- * satisfies the SafeStyleSheet type constraint. This requirement implies that
51
- * for any value {@code styleSheet} of this type,
52
- * {@code goog.html.SafeStyleSheet.unwrap(styleSheet1)} must end in
53
- * "beginning of rule" context.
54
-
55
- * A SafeStyleSheet can be constructed via security-reviewed unchecked
56
- * conversions. In this case producers of SafeStyleSheet must ensure themselves
57
- * that the SafeStyleSheet does not contain unsafe script. Note in particular
58
- * that {@code <} is dangerous, even when inside CSS strings, and so should
59
- * always be forbidden or CSS-escaped in user controlled input. For example, if
60
- * {@code </style><script>evil</script>"} were interpolated
61
- * inside a CSS string, it would break out of the context of the original
62
- * style element and {@code evil} would execute. Also note that within an HTML
63
- * style (raw text) element, HTML character references, such as
64
- * {@code <}, are not allowed. See
65
- * http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements
66
- * (similar considerations apply to the style element).
67
- *
68
- * @see goog.html.SafeStyleSheet#fromConstant
69
- * @constructor
70
- * @final
71
- * @struct
72
- * @implements {goog.string.TypedString}
73
- */
74
- goog.html.SafeStyleSheet = function() {
75
- /**
76
- * The contained value of this SafeStyleSheet. The field has a purposely
77
- * ugly name to make (non-compiled) code that attempts to directly access this
78
- * field stand out.
79
- * @private {string}
80
- */
81
- this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = '';
82
-
83
- /**
84
- * A type marker used to implement additional run-time type checking.
85
- * @see goog.html.SafeStyleSheet#unwrap
86
- * @const
87
- * @private
88
- */
89
- this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ =
90
- goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
91
- };
92
-
93
-
94
- /**
95
- * @override
96
- * @const
97
- */
98
- goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString = true;
99
-
100
-
101
- /**
102
- * Type marker for the SafeStyleSheet type, used to implement additional
103
- * run-time type checking.
104
- * @const {!Object}
105
- * @private
106
- */
107
- goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
108
-
109
-
110
- /**
111
- * Creates a new SafeStyleSheet object by concatenating values.
112
- * @param {...(!goog.html.SafeStyleSheet|!Array<!goog.html.SafeStyleSheet>)}
113
- * var_args Values to concatenate.
114
- * @return {!goog.html.SafeStyleSheet}
115
- */
116
- goog.html.SafeStyleSheet.concat = function(var_args) {
117
- var result = '';
118
-
119
- /**
120
- * @param {!goog.html.SafeStyleSheet|!Array<!goog.html.SafeStyleSheet>}
121
- * argument
122
- */
123
- var addArgument = function(argument) {
124
- if (goog.isArray(argument)) {
125
- goog.array.forEach(argument, addArgument);
126
- } else {
127
- result += goog.html.SafeStyleSheet.unwrap(argument);
128
- }
129
- };
130
-
131
- goog.array.forEach(arguments, addArgument);
132
- return goog.html.SafeStyleSheet
133
- .createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(result);
134
- };
135
-
136
-
137
- /**
138
- * Creates a SafeStyleSheet object from a compile-time constant string.
139
- *
140
- * {@code styleSheet} must not have any &lt; characters in it, so that
141
- * the syntactic structure of the surrounding HTML is not affected.
142
- *
143
- * @param {!goog.string.Const} styleSheet A compile-time-constant string from
144
- * which to create a SafeStyleSheet.
145
- * @return {!goog.html.SafeStyleSheet} A SafeStyleSheet object initialized to
146
- * {@code styleSheet}.
147
- */
148
- goog.html.SafeStyleSheet.fromConstant = function(styleSheet) {
149
- var styleSheetString = goog.string.Const.unwrap(styleSheet);
150
- if (styleSheetString.length === 0) {
151
- return goog.html.SafeStyleSheet.EMPTY;
152
- }
153
- // > is a valid character in CSS selectors and there's no strict need to
154
- // block it if we already block <.
155
- goog.asserts.assert(!goog.string.contains(styleSheetString, '<'),
156
- "Forbidden '<' character in style sheet string: " + styleSheetString);
157
- return goog.html.SafeStyleSheet.
158
- createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheetString);
159
- };
160
-
161
-
162
- /**
163
- * Returns this SafeStyleSheet's value as a string.
164
- *
165
- * IMPORTANT: In code where it is security relevant that an object's type is
166
- * indeed {@code SafeStyleSheet}, use {@code goog.html.SafeStyleSheet.unwrap}
167
- * instead of this method. If in doubt, assume that it's security relevant. In
168
- * particular, note that goog.html functions which return a goog.html type do
169
- * not guarantee the returned instance is of the right type. For example:
170
- *
171
- * <pre>
172
- * var fakeSafeHtml = new String('fake');
173
- * fakeSafeHtml.__proto__ = goog.html.SafeHtml.prototype;
174
- * var newSafeHtml = goog.html.SafeHtml.htmlEscape(fakeSafeHtml);
175
- * // newSafeHtml is just an alias for fakeSafeHtml, it's passed through by
176
- * // goog.html.SafeHtml.htmlEscape() as fakeSafeHtml
177
- * // instanceof goog.html.SafeHtml.
178
- * </pre>
179
- *
180
- * @see goog.html.SafeStyleSheet#unwrap
181
- * @override
182
- */
183
- goog.html.SafeStyleSheet.prototype.getTypedStringValue = function() {
184
- return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
185
- };
186
-
187
-
188
- if (goog.DEBUG) {
189
- /**
190
- * Returns a debug string-representation of this value.
191
- *
192
- * To obtain the actual string value wrapped in a SafeStyleSheet, use
193
- * {@code goog.html.SafeStyleSheet.unwrap}.
194
- *
195
- * @see goog.html.SafeStyleSheet#unwrap
196
- * @override
197
- */
198
- goog.html.SafeStyleSheet.prototype.toString = function() {
199
- return 'SafeStyleSheet{' +
200
- this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ + '}';
201
- };
202
- }
203
-
204
-
205
- /**
206
- * Performs a runtime check that the provided object is indeed a
207
- * SafeStyleSheet object, and returns its value.
208
- *
209
- * @param {!goog.html.SafeStyleSheet} safeStyleSheet The object to extract from.
210
- * @return {string} The safeStyleSheet object's contained string, unless
211
- * the run-time type check fails. In that case, {@code unwrap} returns an
212
- * innocuous string, or, if assertions are enabled, throws
213
- * {@code goog.asserts.AssertionError}.
214
- */
215
- goog.html.SafeStyleSheet.unwrap = function(safeStyleSheet) {
216
- // Perform additional Run-time type-checking to ensure that
217
- // safeStyleSheet is indeed an instance of the expected type. This
218
- // provides some additional protection against security bugs due to
219
- // application code that disables type checks.
220
- // Specifically, the following checks are performed:
221
- // 1. The object is an instance of the expected type.
222
- // 2. The object is not an instance of a subclass.
223
- // 3. The object carries a type marker for the expected type. "Faking" an
224
- // object requires a reference to the type marker, which has names intended
225
- // to stand out in code reviews.
226
- if (safeStyleSheet instanceof goog.html.SafeStyleSheet &&
227
- safeStyleSheet.constructor === goog.html.SafeStyleSheet &&
228
- safeStyleSheet.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ ===
229
- goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
230
- return safeStyleSheet.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
231
- } else {
232
- goog.asserts.fail(
233
- "expected object of type SafeStyleSheet, got '" + safeStyleSheet +
234
- "'");
235
- return 'type_error:SafeStyleSheet';
236
- }
237
- };
238
-
239
-
240
- /**
241
- * Package-internal utility method to create SafeStyleSheet instances.
242
- *
243
- * @param {string} styleSheet The string to initialize the SafeStyleSheet
244
- * object with.
245
- * @return {!goog.html.SafeStyleSheet} The initialized SafeStyleSheet object.
246
- * @package
247
- */
248
- goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse =
249
- function(styleSheet) {
250
- return new goog.html.SafeStyleSheet().initSecurityPrivateDoNotAccessOrElse_(
251
- styleSheet);
252
- };
253
-
254
-
255
- /**
256
- * Called from createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(). This
257
- * method exists only so that the compiler can dead code eliminate static
258
- * fields (like EMPTY) when they're not accessed.
259
- * @param {string} styleSheet
260
- * @return {!goog.html.SafeStyleSheet}
261
- * @private
262
- */
263
- goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_ =
264
- function(styleSheet) {
265
- this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = styleSheet;
266
- return this;
267
- };
268
-
269
-
270
- /**
271
- * A SafeStyleSheet instance corresponding to the empty string.
272
- * @const {!goog.html.SafeStyleSheet}
273
- */
274
- goog.html.SafeStyleSheet.EMPTY =
275
- goog.html.SafeStyleSheet.
276
- createSafeStyleSheetSecurityPrivateDoNotAccessOrElse('');
@@ -1,398 +0,0 @@
1
- // Copyright 2013 The Closure Library Authors. All Rights Reserved.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS-IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- /**
16
- * @fileoverview The SafeUrl type and its builders.
17
- *
18
- * TODO(xtof): Link to document stating type contract.
19
- */
20
-
21
- goog.provide('goog.html.SafeUrl');
22
-
23
- goog.require('goog.asserts');
24
- goog.require('goog.fs.url');
25
- goog.require('goog.i18n.bidi.Dir');
26
- goog.require('goog.i18n.bidi.DirectionalString');
27
- goog.require('goog.string.Const');
28
- goog.require('goog.string.TypedString');
29
-
30
-
31
-
32
- /**
33
- * A string that is safe to use in URL context in DOM APIs and HTML documents.
34
- *
35
- * A SafeUrl is a string-like object that carries the security type contract
36
- * that its value as a string will not cause untrusted script execution
37
- * when evaluated as a hyperlink URL in a browser.
38
- *
39
- * Values of this type are guaranteed to be safe to use in URL/hyperlink
40
- * contexts, such as, assignment to URL-valued DOM properties, or
41
- * interpolation into a HTML template in URL context (e.g., inside a href
42
- * attribute), in the sense that the use will not result in a
43
- * Cross-Site-Scripting vulnerability.
44
- *
45
- * Note that, as documented in {@code goog.html.SafeUrl.unwrap}, this type's
46
- * contract does not guarantee that instances are safe to interpolate into HTML
47
- * without appropriate escaping.
48
- *
49
- * Note also that this type's contract does not imply any guarantees regarding
50
- * the resource the URL refers to. In particular, SafeUrls are <b>not</b>
51
- * safe to use in a context where the referred-to resource is interpreted as
52
- * trusted code, e.g., as the src of a script tag.
53
- *
54
- * Instances of this type must be created via the factory methods
55
- * ({@code goog.html.SafeUrl.fromConstant}, {@code goog.html.SafeUrl.sanitize}),
56
- * etc and not by invoking its constructor. The constructor intentionally
57
- * takes no parameters and the type is immutable; hence only a default instance
58
- * corresponding to the empty string can be obtained via constructor invocation.
59
- *
60
- * @see goog.html.SafeUrl#fromConstant
61
- * @see goog.html.SafeUrl#from
62
- * @see goog.html.SafeUrl#sanitize
63
- * @constructor
64
- * @final
65
- * @struct
66
- * @implements {goog.i18n.bidi.DirectionalString}
67
- * @implements {goog.string.TypedString}
68
- */
69
- goog.html.SafeUrl = function() {
70
- /**
71
- * The contained value of this SafeUrl. The field has a purposely ugly
72
- * name to make (non-compiled) code that attempts to directly access this
73
- * field stand out.
74
- * @private {string}
75
- */
76
- this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = '';
77
-
78
- /**
79
- * A type marker used to implement additional run-time type checking.
80
- * @see goog.html.SafeUrl#unwrap
81
- * @const
82
- * @private
83
- */
84
- this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ =
85
- goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
86
- };
87
-
88
-
89
- /**
90
- * The innocuous string generated by goog.html.SafeUrl.sanitize when passed
91
- * an unsafe URL.
92
- *
93
- * about:invalid is registered in
94
- * http://www.w3.org/TR/css3-values/#about-invalid.
95
- * http://tools.ietf.org/html/rfc6694#section-2.2.1 permits about URLs to
96
- * contain a fragment, which is not to be considered when determining if an
97
- * about URL is well-known.
98
- *
99
- * Using about:invalid seems preferable to using a fixed data URL, since
100
- * browsers might choose to not report CSP violations on it, as legitimate
101
- * CSS function calls to attr() can result in this URL being produced. It is
102
- * also a standard URL which matches exactly the semantics we need:
103
- * "The about:invalid URI references a non-existent document with a generic
104
- * error condition. It can be used when a URI is necessary, but the default
105
- * value shouldn't be resolveable as any type of document".
106
- *
107
- * @const {string}
108
- */
109
- goog.html.SafeUrl.INNOCUOUS_STRING = 'about:invalid#zClosurez';
110
-
111
-
112
- /**
113
- * @override
114
- * @const
115
- */
116
- goog.html.SafeUrl.prototype.implementsGoogStringTypedString = true;
117
-
118
-
119
- /**
120
- * Returns this SafeUrl's value a string.
121
- *
122
- * IMPORTANT: In code where it is security relevant that an object's type is
123
- * indeed {@code SafeUrl}, use {@code goog.html.SafeUrl.unwrap} instead of this
124
- * method. If in doubt, assume that it's security relevant. In particular, note
125
- * that goog.html functions which return a goog.html type do not guarantee that
126
- * the returned instance is of the right type. For example:
127
- *
128
- * <pre>
129
- * var fakeSafeHtml = new String('fake');
130
- * fakeSafeHtml.__proto__ = goog.html.SafeHtml.prototype;
131
- * var newSafeHtml = goog.html.SafeHtml.htmlEscape(fakeSafeHtml);
132
- * // newSafeHtml is just an alias for fakeSafeHtml, it's passed through by
133
- * // goog.html.SafeHtml.htmlEscape() as fakeSafeHtml instanceof
134
- * // goog.html.SafeHtml.
135
- * </pre>
136
- *
137
- * IMPORTANT: The guarantees of the SafeUrl type contract only extend to the
138
- * behavior of browsers when interpreting URLs. Values of SafeUrl objects MUST
139
- * be appropriately escaped before embedding in a HTML document. Note that the
140
- * required escaping is context-sensitive (e.g. a different escaping is
141
- * required for embedding a URL in a style property within a style
142
- * attribute, as opposed to embedding in a href attribute).
143
- *
144
- * @see goog.html.SafeUrl#unwrap
145
- * @override
146
- */
147
- goog.html.SafeUrl.prototype.getTypedStringValue = function() {
148
- return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
149
- };
150
-
151
-
152
- /**
153
- * @override
154
- * @const
155
- */
156
- goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString = true;
157
-
158
-
159
- /**
160
- * Returns this URLs directionality, which is always {@code LTR}.
161
- * @override
162
- */
163
- goog.html.SafeUrl.prototype.getDirection = function() {
164
- return goog.i18n.bidi.Dir.LTR;
165
- };
166
-
167
-
168
- if (goog.DEBUG) {
169
- /**
170
- * Returns a debug string-representation of this value.
171
- *
172
- * To obtain the actual string value wrapped in a SafeUrl, use
173
- * {@code goog.html.SafeUrl.unwrap}.
174
- *
175
- * @see goog.html.SafeUrl#unwrap
176
- * @override
177
- */
178
- goog.html.SafeUrl.prototype.toString = function() {
179
- return 'SafeUrl{' + this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ +
180
- '}';
181
- };
182
- }
183
-
184
-
185
- /**
186
- * Performs a runtime check that the provided object is indeed a SafeUrl
187
- * object, and returns its value.
188
- *
189
- * IMPORTANT: The guarantees of the SafeUrl type contract only extend to the
190
- * behavior of browsers when interpreting URLs. Values of SafeUrl objects MUST
191
- * be appropriately escaped before embedding in a HTML document. Note that the
192
- * required escaping is context-sensitive (e.g. a different escaping is
193
- * required for embedding a URL in a style property within a style
194
- * attribute, as opposed to embedding in a href attribute).
195
- *
196
- * @param {!goog.html.SafeUrl} safeUrl The object to extract from.
197
- * @return {string} The SafeUrl object's contained string, unless the run-time
198
- * type check fails. In that case, {@code unwrap} returns an innocuous
199
- * string, or, if assertions are enabled, throws
200
- * {@code goog.asserts.AssertionError}.
201
- */
202
- goog.html.SafeUrl.unwrap = function(safeUrl) {
203
- // Perform additional Run-time type-checking to ensure that safeUrl is indeed
204
- // an instance of the expected type. This provides some additional protection
205
- // against security bugs due to application code that disables type checks.
206
- // Specifically, the following checks are performed:
207
- // 1. The object is an instance of the expected type.
208
- // 2. The object is not an instance of a subclass.
209
- // 3. The object carries a type marker for the expected type. "Faking" an
210
- // object requires a reference to the type marker, which has names intended
211
- // to stand out in code reviews.
212
- if (safeUrl instanceof goog.html.SafeUrl &&
213
- safeUrl.constructor === goog.html.SafeUrl &&
214
- safeUrl.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ ===
215
- goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
216
- return safeUrl.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
217
- } else {
218
- goog.asserts.fail('expected object of type SafeUrl, got \'' +
219
- safeUrl + '\'');
220
- return 'type_error:SafeUrl';
221
-
222
- }
223
- };
224
-
225
-
226
- /**
227
- * Creates a SafeUrl object from a compile-time constant string.
228
- *
229
- * Compile-time constant strings are inherently program-controlled and hence
230
- * trusted.
231
- *
232
- * @param {!goog.string.Const} url A compile-time-constant string from which to
233
- * create a SafeUrl.
234
- * @return {!goog.html.SafeUrl} A SafeUrl object initialized to {@code url}.
235
- */
236
- goog.html.SafeUrl.fromConstant = function(url) {
237
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(
238
- goog.string.Const.unwrap(url));
239
- };
240
-
241
-
242
- /**
243
- * A pattern that matches Blob or data types that can have SafeUrls created
244
- * from URL.createObjectURL(blob) or via a data: URI. Only matches image and
245
- * video types, currently.
246
- * @const
247
- * @private
248
- */
249
- goog.html.SAFE_MIME_TYPE_PATTERN_ =
250
- /^(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm))$/i;
251
-
252
-
253
- /**
254
- * Creates a SafeUrl wrapping a blob URL for the given {@code blob}.
255
- *
256
- * The blob URL is created with {@code URL.createObjectURL}. If the MIME type
257
- * for {@code blob} is not of a known safe image or video MIME type, then the
258
- * SafeUrl will wrap {@link #INNOCUOUS_STRING}.
259
- *
260
- * @see http://www.w3.org/TR/FileAPI/#url
261
- * @param {!Blob} blob
262
- * @return {!goog.html.SafeUrl} The blob URL, or an innocuous string wrapped
263
- * as a SafeUrl.
264
- */
265
- goog.html.SafeUrl.fromBlob = function(blob) {
266
- var url = goog.html.SAFE_MIME_TYPE_PATTERN_.test(blob.type) ?
267
- goog.fs.url.createObjectUrl(blob) : goog.html.SafeUrl.INNOCUOUS_STRING;
268
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url);
269
- };
270
-
271
-
272
- /**
273
- * Matches a base-64 data URL, with the first match group being the MIME type.
274
- * @const
275
- * @private
276
- */
277
- goog.html.DATA_URL_PATTERN_ = /^data:([^;,]*);base64,[a-z0-9+\/]+=*$/i;
278
-
279
-
280
- /**
281
- * Creates a SafeUrl wrapping a data: URL, after validating it matches a
282
- * known-safe image or video MIME type.
283
- *
284
- * @param {string} dataUrl A valid base64 data URL with one of the whitelisted
285
- * image or video MIME types.
286
- * @return {!goog.html.SafeUrl} A matching safe URL, or {@link INNOCUOUS_STRING}
287
- * wrapped as a SafeUrl if it does not pass.
288
- */
289
- goog.html.SafeUrl.fromDataUrl = function(dataUrl) {
290
- // There's a slight risk here that a browser sniffs the content type if it
291
- // doesn't know the MIME type and executes HTML within the data: URL. For this
292
- // to cause XSS it would also have to execute the HTML in the same origin
293
- // of the page with the link. It seems unlikely that both of these will
294
- // happen, particularly in not really old IEs.
295
- var match = dataUrl.match(goog.html.DATA_URL_PATTERN_);
296
- var valid = match && goog.html.SAFE_MIME_TYPE_PATTERN_.test(match[1]);
297
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(
298
- valid ? dataUrl : goog.html.SafeUrl.INNOCUOUS_STRING);
299
- };
300
-
301
-
302
- /**
303
- * A pattern that recognizes a commonly useful subset of URLs that satisfy
304
- * the SafeUrl contract.
305
- *
306
- * This regular expression matches a subset of URLs that will not cause script
307
- * execution if used in URL context within a HTML document. Specifically, this
308
- * regular expression matches if (comment from here on and regex copied from
309
- * Soy's EscapingConventions):
310
- * (1) Either a protocol in a whitelist (http, https, mailto or ftp).
311
- * (2) or no protocol. A protocol must be followed by a colon. The below
312
- * allows that by allowing colons only after one of the characters [/?#].
313
- * A colon after a hash (#) must be in the fragment.
314
- * Otherwise, a colon after a (?) must be in a query.
315
- * Otherwise, a colon after a single solidus (/) must be in a path.
316
- * Otherwise, a colon after a double solidus (//) must be in the authority
317
- * (before port).
318
- *
319
- * The pattern disallows &, used in HTML entity declarations before
320
- * one of the characters in [/?#]. This disallows HTML entities used in the
321
- * protocol name, which should never happen, e.g. "h&#116;tp" for "http".
322
- * It also disallows HTML entities in the first path part of a relative path,
323
- * e.g. "foo&lt;bar/baz". Our existing escaping functions should not produce
324
- * that. More importantly, it disallows masking of a colon,
325
- * e.g. "javascript&#58;...".
326
- *
327
- * @private
328
- * @const {!RegExp}
329
- */
330
- goog.html.SAFE_URL_PATTERN_ =
331
- /^(?:(?:https?|mailto|ftp):|[^&:/?#]*(?:[/?#]|$))/i;
332
-
333
-
334
- /**
335
- * Creates a SafeUrl object from {@code url}. If {@code url} is a
336
- * goog.html.SafeUrl then it is simply returned. Otherwise the input string is
337
- * validated to match a pattern of commonly used safe URLs. The string is
338
- * converted to UTF-8 and non-whitelisted characters are percent-encoded. The
339
- * string wrapped by the created SafeUrl will thus contain only ASCII printable
340
- * characters.
341
- *
342
- * {@code url} may be a URL with the http, https, mailto or ftp scheme,
343
- * or a relative URL (i.e., a URL without a scheme; specifically, a
344
- * scheme-relative, absolute-path-relative, or path-relative URL).
345
- *
346
- * {@code url} is converted to UTF-8 and non-whitelisted characters are
347
- * percent-encoded. Whitelisted characters are '%' and, from RFC 3986,
348
- * unreserved characters and reserved characters, with the exception of '\'',
349
- * '(' and ')'. This ensures the the SafeUrl contains only ASCII-printable
350
- * characters and reduces the chance of security bugs were it to be
351
- * interpolated into a specific context without the necessary escaping.
352
- *
353
- * If {@code url} fails validation or does not UTF-16 decode correctly
354
- * (JavaScript strings are UTF-16 encoded), this function returns a SafeUrl
355
- * object containing an innocuous string, goog.html.SafeUrl.INNOCUOUS_STRING.
356
- *
357
- * @see http://url.spec.whatwg.org/#concept-relative-url
358
- * @param {string|!goog.string.TypedString} url The URL to validate.
359
- * @return {!goog.html.SafeUrl} The validated URL, wrapped as a SafeUrl.
360
- */
361
- goog.html.SafeUrl.sanitize = function(url) {
362
- if (url instanceof goog.html.SafeUrl) {
363
- return url;
364
- }
365
- else if (url.implementsGoogStringTypedString) {
366
- url = url.getTypedStringValue();
367
- } else {
368
- url = String(url);
369
- }
370
- if (!goog.html.SAFE_URL_PATTERN_.test(url)) {
371
- url = goog.html.SafeUrl.INNOCUOUS_STRING;
372
- }
373
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url);
374
- };
375
-
376
-
377
- /**
378
- * Type marker for the SafeUrl type, used to implement additional run-time
379
- * type checking.
380
- * @const {!Object}
381
- * @private
382
- */
383
- goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
384
-
385
-
386
- /**
387
- * Package-internal utility method to create SafeUrl instances.
388
- *
389
- * @param {string} url The string to initialize the SafeUrl object with.
390
- * @return {!goog.html.SafeUrl} The initialized SafeUrl object.
391
- * @package
392
- */
393
- goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function(
394
- url) {
395
- var safeUrl = new goog.html.SafeUrl();
396
- safeUrl.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = url;
397
- return safeUrl;
398
- };