selenium-webdriver 2.47.0 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/CHANGES.md +96 -0
  2. package/NOTICE +1 -1
  3. package/README.md +57 -6
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +597 -5
  8. package/example/google_search_generator.js +2 -4
  9. package/example/logging.js +6 -2
  10. package/executors.js +11 -27
  11. package/firefox/binary.js +80 -114
  12. package/firefox/extension.js +10 -19
  13. package/firefox/index.js +175 -171
  14. package/firefox/profile.js +221 -239
  15. package/http/index.js +396 -77
  16. package/http/util.js +35 -35
  17. package/ie.js +288 -309
  18. package/index.js +34 -125
  19. package/io/exec.js +58 -39
  20. package/io/index.js +54 -48
  21. package/lib/actions.js +594 -0
  22. package/lib/by.js +276 -0
  23. package/lib/capabilities.js +404 -0
  24. package/lib/{webdriver/command.js → command.js} +89 -72
  25. package/lib/{webdriver/button.js → devmode.js} +13 -8
  26. package/lib/events.js +210 -0
  27. package/lib/firefox/amd64/libnoblur64.so +0 -0
  28. package/lib/firefox/i386/libnoblur.so +0 -0
  29. package/lib/firefox/webdriver.json +6 -1
  30. package/lib/firefox/webdriver.xpi +0 -0
  31. package/lib/{webdriver/key.js → input.js} +82 -2
  32. package/lib/logging.js +668 -0
  33. package/lib/promise.js +3093 -0
  34. package/lib/safari/client.js +697 -659
  35. package/lib/session.js +79 -0
  36. package/{test/promise_aplus_test.js → lib/symbols.js} +15 -25
  37. package/lib/test/build.js +4 -4
  38. package/lib/test/data/click_tests/disappearing_element.html +62 -0
  39. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  40. package/lib/test/data/click_tests/overlapping_elements.html +70 -0
  41. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  42. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  43. package/lib/test/data/readOnlyPage.html +3 -1
  44. package/lib/test/data/selectPage.html +18 -2
  45. package/lib/test/data/simpleTest.html +1 -0
  46. package/lib/test/fileserver.js +3 -4
  47. package/lib/test/index.js +13 -4
  48. package/lib/test/resources.js +1 -1
  49. package/lib/until.js +428 -0
  50. package/lib/webdriver.js +2351 -0
  51. package/net/portprober.js +15 -11
  52. package/opera.js +295 -314
  53. package/package.json +6 -5
  54. package/phantomjs.js +135 -140
  55. package/proxy.js +6 -4
  56. package/remote/index.js +234 -219
  57. package/safari.js +319 -310
  58. package/test/chrome/options_test.js +11 -9
  59. package/test/element_finding_test.js +51 -13
  60. package/test/error_test.js +163 -0
  61. package/test/execute_script_test.js +1 -1
  62. package/test/firefox/firefox_test.js +24 -0
  63. package/test/http/http_test.js +354 -43
  64. package/test/http/util_test.js +25 -23
  65. package/test/io_test.js +6 -1
  66. package/test/lib/by_test.js +127 -0
  67. package/test/lib/capabilities_test.js +84 -0
  68. package/test/lib/events_test.js +177 -0
  69. package/test/lib/logging_test.js +272 -0
  70. package/test/lib/promise_aplus_test.js +74 -0
  71. package/test/lib/promise_error_test.js +808 -0
  72. package/test/lib/promise_flow_test.js +2282 -0
  73. package/test/lib/promise_generator_test.js +308 -0
  74. package/test/lib/promise_test.js +996 -0
  75. package/test/lib/testutil.js +90 -0
  76. package/test/lib/until_test.js +436 -0
  77. package/test/lib/webdriver_test.js +2207 -0
  78. package/test/page_loading_test.js +7 -9
  79. package/test/stale_element_test.js +2 -2
  80. package/test/testing/assert_test.js +374 -0
  81. package/test/testing/index_test.js +9 -11
  82. package/testing/assert.js +334 -17
  83. package/testing/index.js +10 -0
  84. package/_base.js +0 -200
  85. package/docs/Changes.html +0 -317
  86. package/docs/class_bot_Error.html +0 -15
  87. package/docs/class_webdriver_ActionSequence.html +0 -115
  88. package/docs/class_webdriver_Alert.html +0 -24
  89. package/docs/class_webdriver_AlertPromise.html +0 -91
  90. package/docs/class_webdriver_Capabilities.html +0 -60
  91. package/docs/class_webdriver_Command.html +0 -15
  92. package/docs/class_webdriver_EventEmitter.html +0 -35
  93. package/docs/class_webdriver_FileDetector.html +0 -21
  94. package/docs/class_webdriver_Locator.html +0 -12
  95. package/docs/class_webdriver_Serializable.html +0 -9
  96. package/docs/class_webdriver_Session.html +0 -13
  97. package/docs/class_webdriver_TouchSequence.html +0 -49
  98. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  99. package/docs/class_webdriver_WebDriver.html +0 -313
  100. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  101. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  102. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  103. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  104. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  105. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  106. package/docs/class_webdriver_WebElement.html +0 -216
  107. package/docs/class_webdriver_WebElementPromise.html +0 -266
  108. package/docs/class_webdriver_http_Executor.html +0 -22
  109. package/docs/class_webdriver_http_Request.html +0 -12
  110. package/docs/class_webdriver_http_Response.html +0 -13
  111. package/docs/class_webdriver_logging_Entry.html +0 -15
  112. package/docs/class_webdriver_logging_Level.html +0 -55
  113. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  114. package/docs/class_webdriver_logging_Logger.html +0 -119
  115. package/docs/class_webdriver_logging_Preferences.html +0 -8
  116. package/docs/class_webdriver_promise_CancellationError.html +0 -18
  117. package/docs/class_webdriver_promise_ControlFlow.html +0 -109
  118. package/docs/class_webdriver_promise_Deferred.html +0 -84
  119. package/docs/class_webdriver_promise_Promise.html +0 -74
  120. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  121. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  122. package/docs/class_webdriver_testing_Assertion.html +0 -99
  123. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  124. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  125. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  126. package/docs/class_webdriver_until_Condition.html +0 -7
  127. package/docs/dossier.css +0 -1
  128. package/docs/dossier.js +0 -86
  129. package/docs/enum_bot_ErrorCode.html +0 -3
  130. package/docs/enum_bot_Error_State.html +0 -2
  131. package/docs/enum_webdriver_Browser.html +0 -2
  132. package/docs/enum_webdriver_Button.html +0 -2
  133. package/docs/enum_webdriver_Capability.html +0 -33
  134. package/docs/enum_webdriver_CommandName.html +0 -3
  135. package/docs/enum_webdriver_Key.html +0 -12
  136. package/docs/enum_webdriver_logging_Type.html +0 -6
  137. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  138. package/docs/index.html +0 -123
  139. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  140. package/docs/interface_webdriver_http_Client.html +0 -10
  141. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  142. package/docs/module_selenium-webdriver.html +0 -23
  143. package/docs/module_selenium-webdriver__base.html +0 -23
  144. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  145. package/docs/module_selenium-webdriver_builder.html +0 -2
  146. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  147. package/docs/module_selenium-webdriver_chrome.html +0 -90
  148. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  149. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  150. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  151. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  152. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  153. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  154. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  155. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  156. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  157. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  158. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  159. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  160. package/docs/module_selenium-webdriver_class_WebElement.html +0 -216
  161. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -266
  162. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  163. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  164. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  165. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  166. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  167. package/docs/module_selenium-webdriver_error.html +0 -4
  168. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  169. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  170. package/docs/module_selenium-webdriver_executors.html +0 -10
  171. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  172. package/docs/module_selenium-webdriver_firefox.html +0 -67
  173. package/docs/module_selenium-webdriver_firefox_binary.html +0 -4
  174. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -21
  175. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -21
  176. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  177. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  178. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  179. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  180. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  181. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  182. package/docs/module_selenium-webdriver_http.html +0 -9
  183. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  184. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  185. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  186. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  187. package/docs/module_selenium-webdriver_http_util.html +0 -17
  188. package/docs/module_selenium-webdriver_ie.html +0 -11
  189. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  190. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  191. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  192. package/docs/module_selenium-webdriver_io.html +0 -37
  193. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  194. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  195. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  196. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  197. package/docs/module_selenium-webdriver_namespace_promise.html +0 -162
  198. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  199. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  200. package/docs/module_selenium-webdriver_net.html +0 -7
  201. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  202. package/docs/module_selenium-webdriver_opera.html +0 -62
  203. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  204. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  205. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  206. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  207. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  208. package/docs/module_selenium-webdriver_proxy.html +0 -28
  209. package/docs/module_selenium-webdriver_remote.html +0 -8
  210. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  211. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  212. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -40
  213. package/docs/module_selenium-webdriver_safari.html +0 -9
  214. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  215. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  216. package/docs/module_selenium-webdriver_testing.html +0 -74
  217. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  218. package/docs/namespace_bot.html +0 -4
  219. package/docs/namespace_bot_json.html +0 -20
  220. package/docs/namespace_bot_response.html +0 -18
  221. package/docs/namespace_bot_userAgent.html +0 -33
  222. package/docs/namespace_webdriver.html +0 -30
  223. package/docs/namespace_webdriver_By.html +0 -56
  224. package/docs/namespace_webdriver_http.html +0 -6
  225. package/docs/namespace_webdriver_logging.html +0 -70
  226. package/docs/namespace_webdriver_promise.html +0 -165
  227. package/docs/namespace_webdriver_stacktrace.html +0 -17
  228. package/docs/namespace_webdriver_testing.html +0 -7
  229. package/docs/namespace_webdriver_testing_assert.html +0 -9
  230. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  231. package/docs/namespace_webdriver_until.html +0 -82
  232. package/docs/source/_base.js.src.html +0 -1
  233. package/docs/source/builder.js.src.html +0 -1
  234. package/docs/source/chrome.js.src.html +0 -1
  235. package/docs/source/error.js.src.html +0 -1
  236. package/docs/source/executors.js.src.html +0 -1
  237. package/docs/source/firefox/binary.js.src.html +0 -1
  238. package/docs/source/firefox/extension.js.src.html +0 -1
  239. package/docs/source/firefox/index.js.src.html +0 -1
  240. package/docs/source/firefox/profile.js.src.html +0 -1
  241. package/docs/source/http/index.js.src.html +0 -1
  242. package/docs/source/http/util.js.src.html +0 -1
  243. package/docs/source/ie.js.src.html +0 -1
  244. package/docs/source/index.js.src.html +0 -1
  245. package/docs/source/io/exec.js.src.html +0 -1
  246. package/docs/source/io/index.js.src.html +0 -1
  247. package/docs/source/lib/atoms/error.js.src.html +0 -1
  248. package/docs/source/lib/atoms/json.js.src.html +0 -1
  249. package/docs/source/lib/atoms/response.js.src.html +0 -1
  250. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  251. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  252. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  253. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  254. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  255. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  256. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  257. package/docs/source/lib/goog/base.js.src.html +0 -1
  258. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  259. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  260. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  261. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  262. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  263. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  264. package/docs/source/lib/goog/deps.js.src.html +0 -1
  265. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  266. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  267. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  268. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  269. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  270. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  271. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  272. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  273. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  274. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  275. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  276. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  277. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  278. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  279. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  280. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  285. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  286. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  287. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  288. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  289. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  290. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  291. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  292. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  293. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  294. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  295. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  296. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  297. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  298. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  299. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  300. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  301. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  302. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  303. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  307. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  308. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  309. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  310. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  311. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  312. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  313. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  314. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  315. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  316. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  317. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  318. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  319. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  320. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  321. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  322. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  323. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  324. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  325. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  326. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  327. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  328. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  329. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  330. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  331. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  332. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  333. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  334. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  335. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  336. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/watchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  348. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  349. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  350. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  351. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  352. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  353. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  354. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  355. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  356. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  357. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  358. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  369. package/docs/source/net/index.js.src.html +0 -1
  370. package/docs/source/net/portprober.js.src.html +0 -1
  371. package/docs/source/opera.js.src.html +0 -1
  372. package/docs/source/phantomjs.js.src.html +0 -1
  373. package/docs/source/proxy.js.src.html +0 -1
  374. package/docs/source/remote/index.js.src.html +0 -1
  375. package/docs/source/safari.js.src.html +0 -1
  376. package/docs/source/testing/assert.js.src.html +0 -1
  377. package/docs/source/testing/index.js.src.html +0 -1
  378. package/docs/types.js +0 -1
  379. package/lib/atoms/error.js +0 -202
  380. package/lib/atoms/json.js +0 -80
  381. package/lib/atoms/response.js +0 -110
  382. package/lib/atoms/userAgent.js +0 -257
  383. package/lib/goog/LICENSE +0 -176
  384. package/lib/goog/array/array.js +0 -1655
  385. package/lib/goog/asserts/asserts.js +0 -365
  386. package/lib/goog/async/freelist.js +0 -88
  387. package/lib/goog/async/nexttick.js +0 -241
  388. package/lib/goog/async/run.js +0 -139
  389. package/lib/goog/async/workqueue.js +0 -139
  390. package/lib/goog/base.js +0 -2547
  391. package/lib/goog/debug/debug.js +0 -653
  392. package/lib/goog/debug/entrypointregistry.js +0 -158
  393. package/lib/goog/debug/error.js +0 -63
  394. package/lib/goog/debug/logbuffer.js +0 -148
  395. package/lib/goog/debug/logger.js +0 -873
  396. package/lib/goog/debug/logrecord.js +0 -242
  397. package/lib/goog/deps.js +0 -151
  398. package/lib/goog/disposable/disposable.js +0 -307
  399. package/lib/goog/disposable/idisposable.js +0 -45
  400. package/lib/goog/dom/browserfeature.js +0 -72
  401. package/lib/goog/dom/dom.js +0 -2995
  402. package/lib/goog/dom/nodetype.js +0 -48
  403. package/lib/goog/dom/safe.js +0 -347
  404. package/lib/goog/dom/tagname.js +0 -160
  405. package/lib/goog/dom/tags.js +0 -42
  406. package/lib/goog/dom/vendor.js +0 -96
  407. package/lib/goog/events/browserevent.js +0 -386
  408. package/lib/goog/events/browserfeature.js +0 -85
  409. package/lib/goog/events/event.js +0 -143
  410. package/lib/goog/events/eventid.js +0 -47
  411. package/lib/goog/events/events.js +0 -984
  412. package/lib/goog/events/eventtarget.js +0 -394
  413. package/lib/goog/events/eventtype.js +0 -233
  414. package/lib/goog/events/keycodes.js +0 -420
  415. package/lib/goog/events/listenable.js +0 -335
  416. package/lib/goog/events/listener.js +0 -131
  417. package/lib/goog/events/listenermap.js +0 -308
  418. package/lib/goog/fs/url.js +0 -105
  419. package/lib/goog/functions/functions.js +0 -332
  420. package/lib/goog/html/safehtml.js +0 -756
  421. package/lib/goog/html/safescript.js +0 -234
  422. package/lib/goog/html/safestyle.js +0 -442
  423. package/lib/goog/html/safestylesheet.js +0 -276
  424. package/lib/goog/html/safeurl.js +0 -431
  425. package/lib/goog/html/trustedresourceurl.js +0 -224
  426. package/lib/goog/html/uncheckedconversions.js +0 -231
  427. package/lib/goog/i18n/bidi.js +0 -908
  428. package/lib/goog/iter/iter.js +0 -1305
  429. package/lib/goog/json/json.js +0 -365
  430. package/lib/goog/labs/testing/assertthat.js +0 -58
  431. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  432. package/lib/goog/labs/testing/matcher.js +0 -80
  433. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  434. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  435. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  436. package/lib/goog/labs/useragent/browser.js +0 -327
  437. package/lib/goog/labs/useragent/engine.js +0 -160
  438. package/lib/goog/labs/useragent/platform.js +0 -160
  439. package/lib/goog/labs/useragent/util.js +0 -148
  440. package/lib/goog/math/box.js +0 -389
  441. package/lib/goog/math/coordinate.js +0 -268
  442. package/lib/goog/math/math.js +0 -451
  443. package/lib/goog/math/rect.js +0 -476
  444. package/lib/goog/math/size.js +0 -227
  445. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  446. package/lib/goog/net/xhrlike.js +0 -124
  447. package/lib/goog/net/xmlhttp.js +0 -246
  448. package/lib/goog/net/xmlhttpfactory.js +0 -67
  449. package/lib/goog/object/object.js +0 -686
  450. package/lib/goog/promise/promise.js +0 -1310
  451. package/lib/goog/promise/resolver.js +0 -48
  452. package/lib/goog/promise/thenable.js +0 -126
  453. package/lib/goog/reflect/reflect.js +0 -78
  454. package/lib/goog/string/const.js +0 -182
  455. package/lib/goog/string/string.js +0 -1565
  456. package/lib/goog/string/typedstring.js +0 -48
  457. package/lib/goog/structs/collection.js +0 -56
  458. package/lib/goog/structs/map.js +0 -456
  459. package/lib/goog/structs/set.js +0 -279
  460. package/lib/goog/structs/structs.js +0 -354
  461. package/lib/goog/style/style.js +0 -2054
  462. package/lib/goog/testing/asserts.js +0 -1265
  463. package/lib/goog/testing/events/events.js +0 -727
  464. package/lib/goog/testing/functionmock.js +0 -176
  465. package/lib/goog/testing/jsunit.js +0 -162
  466. package/lib/goog/testing/loosemock.js +0 -242
  467. package/lib/goog/testing/mock.js +0 -645
  468. package/lib/goog/testing/mockclock.js +0 -617
  469. package/lib/goog/testing/mockcontrol.js +0 -220
  470. package/lib/goog/testing/mockinterface.js +0 -45
  471. package/lib/goog/testing/mockmatchers.js +0 -400
  472. package/lib/goog/testing/objectpropertystring.js +0 -68
  473. package/lib/goog/testing/propertyreplacer.js +0 -245
  474. package/lib/goog/testing/recordfunction.js +0 -215
  475. package/lib/goog/testing/stacktrace.js +0 -594
  476. package/lib/goog/testing/strictmock.js +0 -130
  477. package/lib/goog/testing/testcase.js +0 -1569
  478. package/lib/goog/testing/testrunner.js +0 -440
  479. package/lib/goog/testing/watchers.js +0 -46
  480. package/lib/goog/uri/uri.js +0 -1507
  481. package/lib/goog/uri/utils.js +0 -1116
  482. package/lib/goog/useragent/product.js +0 -175
  483. package/lib/goog/useragent/product_isversion.js +0 -143
  484. package/lib/goog/useragent/useragent.js +0 -538
  485. package/lib/webdriver/actionsequence.js +0 -356
  486. package/lib/webdriver/builder.js +0 -208
  487. package/lib/webdriver/capabilities.js +0 -411
  488. package/lib/webdriver/events.js +0 -179
  489. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  490. package/lib/webdriver/http/corsclient.js +0 -133
  491. package/lib/webdriver/http/http.js +0 -523
  492. package/lib/webdriver/http/xhrclient.js +0 -67
  493. package/lib/webdriver/locators.js +0 -257
  494. package/lib/webdriver/logging.js +0 -347
  495. package/lib/webdriver/promise.js +0 -2609
  496. package/lib/webdriver/serializable.js +0 -41
  497. package/lib/webdriver/session.js +0 -74
  498. package/lib/webdriver/stacktrace.js +0 -619
  499. package/lib/webdriver/test/builder_test.js +0 -53
  500. package/lib/webdriver/test/capabilities_test.js +0 -72
  501. package/lib/webdriver/test/events_test.js +0 -203
  502. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  503. package/lib/webdriver/test/http/http_test.js +0 -428
  504. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  505. package/lib/webdriver/test/locators_test.js +0 -59
  506. package/lib/webdriver/test/logging_test.js +0 -85
  507. package/lib/webdriver/test/promise_error_test.js +0 -719
  508. package/lib/webdriver/test/promise_flow_test.js +0 -1957
  509. package/lib/webdriver/test/promise_generator_test.js +0 -251
  510. package/lib/webdriver/test/promise_test.js +0 -1981
  511. package/lib/webdriver/test/stacktrace_test.js +0 -480
  512. package/lib/webdriver/test/test_bootstrap.js +0 -67
  513. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  514. package/lib/webdriver/test/testing/client_test.js +0 -88
  515. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  516. package/lib/webdriver/test/testutil.js +0 -209
  517. package/lib/webdriver/test/testutil_test.js +0 -104
  518. package/lib/webdriver/test/until_test.js +0 -411
  519. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  520. package/lib/webdriver/test/webdriver_test.js +0 -2369
  521. package/lib/webdriver/testing/asserts.js +0 -487
  522. package/lib/webdriver/testing/client.js +0 -179
  523. package/lib/webdriver/testing/jsunit.js +0 -363
  524. package/lib/webdriver/testing/testcase.js +0 -168
  525. package/lib/webdriver/testing/window.js +0 -244
  526. package/lib/webdriver/touchsequence.js +0 -248
  527. package/lib/webdriver/until.js +0 -412
  528. package/lib/webdriver/webdriver.js +0 -2492
  529. package/test/_base_test.js +0 -129
@@ -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(user): 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
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,431 +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(user): 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
- * Note that the returned value does not necessarily correspond to the string
197
- * with which the SafeUrl was constructed, since goog.html.SafeUrl.sanitize
198
- * will percent-encode many characters.
199
- *
200
- * @param {!goog.html.SafeUrl} safeUrl The object to extract from.
201
- * @return {string} The SafeUrl object's contained string, unless the run-time
202
- * type check fails. In that case, {@code unwrap} returns an innocuous
203
- * string, or, if assertions are enabled, throws
204
- * {@code goog.asserts.AssertionError}.
205
- */
206
- goog.html.SafeUrl.unwrap = function(safeUrl) {
207
- // Perform additional Run-time type-checking to ensure that safeUrl is indeed
208
- // an instance of the expected type. This provides some additional protection
209
- // against security bugs due to application code that disables type checks.
210
- // Specifically, the following checks are performed:
211
- // 1. The object is an instance of the expected type.
212
- // 2. The object is not an instance of a subclass.
213
- // 3. The object carries a type marker for the expected type. "Faking" an
214
- // object requires a reference to the type marker, which has names intended
215
- // to stand out in code reviews.
216
- if (safeUrl instanceof goog.html.SafeUrl &&
217
- safeUrl.constructor === goog.html.SafeUrl &&
218
- safeUrl.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ ===
219
- goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
220
- return safeUrl.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
221
- } else {
222
- goog.asserts.fail('expected object of type SafeUrl, got \'' +
223
- safeUrl + '\'');
224
- return 'type_error:SafeUrl';
225
-
226
- }
227
- };
228
-
229
-
230
- /**
231
- * Creates a SafeUrl object from a compile-time constant string.
232
- *
233
- * Compile-time constant strings are inherently program-controlled and hence
234
- * trusted.
235
- *
236
- * @param {!goog.string.Const} url A compile-time-constant string from which to
237
- * create a SafeUrl.
238
- * @return {!goog.html.SafeUrl} A SafeUrl object initialized to {@code url}.
239
- */
240
- goog.html.SafeUrl.fromConstant = function(url) {
241
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(
242
- goog.string.Const.unwrap(url));
243
- };
244
-
245
-
246
- /**
247
- * A pattern that matches Blob types that can have SafeUrls created from
248
- * URL.createObjectURL(blob). Only matches image types, currently.
249
- * @const
250
- * @private
251
- */
252
- goog.html.SAFE_BLOB_TYPE_PATTERN_ =
253
- /^image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)$/i;
254
-
255
-
256
- /**
257
- * Creates a SafeUrl wrapping a blob URL for the given {@code blob}. The
258
- * blob URL is created with {@code URL.createObjectURL}. If the MIME type
259
- * for {@code blob} is not of a known safe image MIME type, then the
260
- * SafeUrl will wrap {@link #INNOCUOUS_STRING}.
261
- * @see http://www.w3.org/TR/FileAPI/#url
262
- * @param {!Blob} blob
263
- * @return {!goog.html.SafeUrl} The blob URL, or an innocuous string wrapped
264
- * as a SafeUrl.
265
- */
266
- goog.html.SafeUrl.fromBlob = function(blob) {
267
- var url = goog.html.SAFE_BLOB_TYPE_PATTERN_.test(blob.type) ?
268
- goog.fs.url.createObjectUrl(blob) : goog.html.SafeUrl.INNOCUOUS_STRING;
269
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url);
270
- };
271
-
272
-
273
- /**
274
- * A pattern that recognizes a commonly useful subset of URLs that satisfy
275
- * the SafeUrl contract.
276
- *
277
- * This regular expression matches a subset of URLs that will not cause script
278
- * execution if used in URL context within a HTML document. Specifically, this
279
- * regular expression matches if (comment from here on and regex copied from
280
- * Soy's EscapingConventions):
281
- * (1) Either a protocol in a whitelist (http, https, mailto or ftp).
282
- * (2) or no protocol. A protocol must be followed by a colon. The below
283
- * allows that by allowing colons only after one of the characters [/?#].
284
- * A colon after a hash (#) must be in the fragment.
285
- * Otherwise, a colon after a (?) must be in a query.
286
- * Otherwise, a colon after a single solidus (/) must be in a path.
287
- * Otherwise, a colon after a double solidus (//) must be in the authority
288
- * (before port).
289
- *
290
- * The pattern disallows &, used in HTML entity declarations before
291
- * one of the characters in [/?#]. This disallows HTML entities used in the
292
- * protocol name, which should never happen, e.g. "h&#116;tp" for "http".
293
- * It also disallows HTML entities in the first path part of a relative path,
294
- * e.g. "foo&lt;bar/baz". Our existing escaping functions should not produce
295
- * that. More importantly, it disallows masking of a colon,
296
- * e.g. "javascript&#58;...".
297
- *
298
- * @private
299
- * @const {!RegExp}
300
- */
301
- goog.html.SAFE_URL_PATTERN_ =
302
- /^(?:(?:https?|mailto|ftp):|[^&:/?#]*(?:[/?#]|$))/i;
303
-
304
-
305
- /**
306
- * Creates a SafeUrl object from {@code url}. If {@code url} is a
307
- * goog.html.SafeUrl then it is simply returned. Otherwise the input string is
308
- * validated to match a pattern of commonly used safe URLs. The string is
309
- * converted to UTF-8 and non-whitelisted characters are percent-encoded. The
310
- * string wrapped by the created SafeUrl will thus contain only ASCII printable
311
- * characters.
312
- *
313
- * {@code url} may be a URL with the http, https, mailto or ftp scheme,
314
- * or a relative URL (i.e., a URL without a scheme; specifically, a
315
- * scheme-relative, absolute-path-relative, or path-relative URL).
316
- *
317
- * {@code url} is converted to UTF-8 and non-whitelisted characters are
318
- * percent-encoded. Whitelisted characters are '%' and, from RFC 3986,
319
- * unreserved characters and reserved characters, with the exception of '\'',
320
- * '(' and ')'. This ensures the the SafeUrl contains only ASCII-printable
321
- * characters and reduces the chance of security bugs were it to be
322
- * interpolated into a specific context without the necessary escaping.
323
- *
324
- * If {@code url} fails validation or does not UTF-16 decode correctly
325
- * (JavaScript strings are UTF-16 encoded), this function returns a SafeUrl
326
- * object containing an innocuous string, goog.html.SafeUrl.INNOCUOUS_STRING.
327
- *
328
- * @see http://url.spec.whatwg.org/#concept-relative-url
329
- * @param {string|!goog.string.TypedString} url The URL to validate.
330
- * @return {!goog.html.SafeUrl} The validated URL, wrapped as a SafeUrl.
331
- */
332
- goog.html.SafeUrl.sanitize = function(url) {
333
- if (url instanceof goog.html.SafeUrl) {
334
- return url;
335
- }
336
- else if (url.implementsGoogStringTypedString) {
337
- url = url.getTypedStringValue();
338
- } else {
339
- url = String(url);
340
- }
341
- if (!goog.html.SAFE_URL_PATTERN_.test(url)) {
342
- url = goog.html.SafeUrl.INNOCUOUS_STRING;
343
- } else {
344
- url = goog.html.SafeUrl.normalize_(url);
345
- }
346
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url);
347
- };
348
-
349
-
350
- /**
351
- * Normalizes {@code url} the UTF-8 encoding of url, using a whitelist of
352
- * characters. Whitelisted characters are not percent-encoded.
353
- * @param {string} url The URL to normalize.
354
- * @return {string} The normalized URL.
355
- * @private
356
- */
357
- goog.html.SafeUrl.normalize_ = function(url) {
358
- try {
359
- var normalized = encodeURI(url);
360
- } catch (e) { // Happens if url contains invalid surrogate sequences.
361
- return goog.html.SafeUrl.INNOCUOUS_STRING;
362
- }
363
-
364
- return normalized.replace(
365
- goog.html.SafeUrl.NORMALIZE_MATCHER_,
366
- function(match) {
367
- return goog.html.SafeUrl.NORMALIZE_REPLACER_MAP_[match];
368
- });
369
- };
370
-
371
-
372
- /**
373
- * Matches characters and strings which need to be replaced in the string
374
- * generated by encodeURI. Specifically:
375
- *
376
- * - '\'', '(' and ')' are not encoded. They are part of the reserved
377
- * characters group in RFC 3986 but only appear in the obsolete mark
378
- * production in Appendix D.2 of RFC 3986, so they can be encoded without
379
- * changing semantics.
380
- * - '[' and ']' are encoded by encodeURI, despite being reserved characters
381
- * which can be used to represent IPv6 addresses. So they need to be decoded.
382
- * - '%' is encoded by encodeURI. However, encoding '%' characters that are
383
- * already part of a valid percent-encoded sequence changes the semantics of a
384
- * URL, and hence we need to preserve them. Note that this may allow
385
- * non-encoded '%' characters to remain in the URL (i.e., occurrences of '%'
386
- * that are not part of a valid percent-encoded sequence, for example,
387
- * 'ab%xy').
388
- *
389
- * @const {!RegExp}
390
- * @private
391
- */
392
- goog.html.SafeUrl.NORMALIZE_MATCHER_ = /[()']|%5B|%5D|%25/g;
393
-
394
-
395
- /**
396
- * Map of replacements to be done in string generated by encodeURI.
397
- * @const {!Object<string, string>}
398
- * @private
399
- */
400
- goog.html.SafeUrl.NORMALIZE_REPLACER_MAP_ = {
401
- '\'': '%27',
402
- '(': '%28',
403
- ')': '%29',
404
- '%5B': '[',
405
- '%5D': ']',
406
- '%25': '%'
407
- };
408
-
409
-
410
- /**
411
- * Type marker for the SafeUrl type, used to implement additional run-time
412
- * type checking.
413
- * @const
414
- * @private
415
- */
416
- goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
417
-
418
-
419
- /**
420
- * Package-internal utility method to create SafeUrl instances.
421
- *
422
- * @param {string} url The string to initialize the SafeUrl object with.
423
- * @return {!goog.html.SafeUrl} The initialized SafeUrl object.
424
- * @package
425
- */
426
- goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function(
427
- url) {
428
- var safeUrl = new goog.html.SafeUrl();
429
- safeUrl.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = url;
430
- return safeUrl;
431
- };