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.
- package/CHANGES.md +116 -0
- package/NOTICE +1 -1
- package/README.md +59 -9
- package/builder.js +375 -358
- package/chrome.js +549 -586
- package/edge.js +378 -0
- package/error.js +9 -6
- package/example/google_search.js +1 -1
- package/example/google_search_generator.js +2 -4
- package/example/logging.js +6 -2
- package/example/sample.js +21 -0
- package/executors.js +11 -27
- package/firefox/binary.js +149 -98
- package/firefox/extension.js +15 -19
- package/firefox/index.js +256 -163
- package/firefox/profile.js +223 -243
- package/http/index.js +487 -81
- package/http/util.js +40 -36
- package/ie.js +288 -309
- package/index.js +34 -125
- package/io/exec.js +58 -39
- package/io/index.js +72 -60
- package/lib/README +4 -0
- package/lib/actions.js +596 -0
- package/lib/by.js +277 -0
- package/lib/capabilities.js +450 -0
- package/lib/{webdriver/command.js → command.js} +91 -72
- package/lib/{webdriver/button.js → devmode.js} +13 -8
- package/lib/error.js +690 -0
- package/lib/events.js +212 -0
- package/lib/firefox/amd64/libnoblur64.so +0 -0
- package/lib/firefox/i386/libnoblur.so +0 -0
- package/lib/firefox/webdriver.json +5 -1
- package/lib/firefox/webdriver.xpi +0 -0
- package/lib/{webdriver/key.js → input.js} +84 -2
- package/lib/logging.js +670 -0
- package/lib/{webdriver/promise.js → promise.js} +817 -644
- package/lib/safari/client.js +266 -214
- package/lib/session.js +80 -0
- package/lib/{webdriver/serializable.js → symbols.js} +16 -19
- package/lib/test/build.js +4 -4
- package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
- package/lib/test/data/click_tests/overlapping_elements.html +15 -4
- package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
- package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
- package/lib/test/data/hidden_partially.html +45 -0
- package/lib/test/data/readOnlyPage.html +1 -1
- package/lib/test/data/selectPage.html +18 -2
- package/lib/test/fileserver.js +3 -4
- package/lib/test/index.js +7 -3
- package/lib/test/resources.js +1 -1
- package/lib/until.js +376 -0
- package/lib/webdriver.js +2440 -0
- package/net/index.js +4 -0
- package/net/portprober.js +16 -12
- package/opera.js +295 -314
- package/package.json +6 -5
- package/phantomjs.js +144 -147
- package/proxy.js +10 -6
- package/remote/index.js +289 -238
- package/safari.js +326 -311
- package/test/chrome/options_test.js +11 -9
- package/test/element_finding_test.js +51 -13
- package/test/execute_script_test.js +17 -3
- package/test/firefox/firefox_test.js +0 -32
- package/test/http/http_test.js +671 -61
- package/test/http/util_test.js +25 -23
- package/test/io_test.js +67 -1
- package/test/lib/by_test.js +139 -0
- package/test/lib/capabilities_test.js +111 -0
- package/test/lib/error_test.js +325 -0
- package/test/lib/events_test.js +177 -0
- package/test/lib/logging_test.js +272 -0
- package/test/{promise_aplus_test.js → lib/promise_aplus_test.js} +4 -13
- package/test/lib/promise_error_test.js +808 -0
- package/test/lib/promise_flow_test.js +2282 -0
- package/test/lib/promise_generator_test.js +308 -0
- package/test/lib/promise_test.js +996 -0
- package/test/lib/testutil.js +90 -0
- package/test/lib/until_test.js +400 -0
- package/test/lib/webdriver_test.js +2157 -0
- package/test/page_loading_test.js +7 -9
- package/test/remote_test.js +50 -3
- package/test/session_test.js +53 -0
- package/test/stale_element_test.js +2 -2
- package/test/testing/assert_test.js +374 -0
- package/test/testing/index_test.js +9 -11
- package/testing/assert.js +334 -17
- package/testing/index.js +12 -2
- package/_base.js +0 -200
- package/docs/Changes.html +0 -356
- package/docs/class_bot_Error.html +0 -15
- package/docs/class_webdriver_ActionSequence.html +0 -115
- package/docs/class_webdriver_Alert.html +0 -24
- package/docs/class_webdriver_AlertPromise.html +0 -92
- package/docs/class_webdriver_Capabilities.html +0 -60
- package/docs/class_webdriver_Command.html +0 -15
- package/docs/class_webdriver_EventEmitter.html +0 -35
- package/docs/class_webdriver_FileDetector.html +0 -21
- package/docs/class_webdriver_Locator.html +0 -12
- package/docs/class_webdriver_Serializable.html +0 -9
- package/docs/class_webdriver_Session.html +0 -13
- package/docs/class_webdriver_TouchSequence.html +0 -49
- package/docs/class_webdriver_UnhandledAlertError.html +0 -18
- package/docs/class_webdriver_WebDriver.html +0 -313
- package/docs/class_webdriver_WebDriver_Logs.html +0 -15
- package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
- package/docs/class_webdriver_WebDriver_Options.html +0 -41
- package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
- package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
- package/docs/class_webdriver_WebDriver_Window.html +0 -27
- package/docs/class_webdriver_WebElement.html +0 -223
- package/docs/class_webdriver_WebElementPromise.html +0 -274
- package/docs/class_webdriver_http_Executor.html +0 -22
- package/docs/class_webdriver_http_Request.html +0 -12
- package/docs/class_webdriver_http_Response.html +0 -13
- package/docs/class_webdriver_logging_Entry.html +0 -15
- package/docs/class_webdriver_logging_Level.html +0 -55
- package/docs/class_webdriver_logging_LogRecord.html +0 -45
- package/docs/class_webdriver_logging_Logger.html +0 -119
- package/docs/class_webdriver_logging_Preferences.html +0 -8
- package/docs/class_webdriver_promise_CancellationError.html +0 -17
- package/docs/class_webdriver_promise_ControlFlow.html +0 -153
- package/docs/class_webdriver_promise_Deferred.html +0 -84
- package/docs/class_webdriver_promise_MultipleUnhandledRejectionError.html +0 -14
- package/docs/class_webdriver_promise_Promise.html +0 -75
- package/docs/class_webdriver_stacktrace_Frame.html +0 -20
- package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
- package/docs/class_webdriver_testing_Assertion.html +0 -99
- package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
- package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
- package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
- package/docs/class_webdriver_until_Condition.html +0 -7
- package/docs/dossier.css +0 -1
- package/docs/dossier.js +0 -86
- package/docs/enum_bot_ErrorCode.html +0 -3
- package/docs/enum_bot_Error_State.html +0 -2
- package/docs/enum_webdriver_Browser.html +0 -2
- package/docs/enum_webdriver_Button.html +0 -2
- package/docs/enum_webdriver_Capability.html +0 -33
- package/docs/enum_webdriver_CommandName.html +0 -3
- package/docs/enum_webdriver_Key.html +0 -12
- package/docs/enum_webdriver_logging_Type.html +0 -6
- package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
- package/docs/index.html +0 -125
- package/docs/interface_webdriver_CommandExecutor.html +0 -9
- package/docs/interface_webdriver_http_Client.html +0 -10
- package/docs/interface_webdriver_promise_Thenable.html +0 -77
- package/docs/module_selenium-webdriver.html +0 -23
- package/docs/module_selenium-webdriver__base.html +0 -23
- package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
- package/docs/module_selenium-webdriver_builder.html +0 -2
- package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_chrome.html +0 -90
- package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
- package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
- package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
- package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
- package/docs/module_selenium-webdriver_class_Builder.html +0 -138
- package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
- package/docs/module_selenium-webdriver_class_Command.html +0 -15
- package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
- package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
- package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
- package/docs/module_selenium-webdriver_class_Session.html +0 -13
- package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
- package/docs/module_selenium-webdriver_class_WebElement.html +0 -223
- package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -274
- package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
- package/docs/module_selenium-webdriver_enum_Button.html +0 -2
- package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
- package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
- package/docs/module_selenium-webdriver_enum_Key.html +0 -12
- package/docs/module_selenium-webdriver_error.html +0 -4
- package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
- package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
- package/docs/module_selenium-webdriver_executors.html +0 -10
- package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
- package/docs/module_selenium-webdriver_firefox.html +0 -68
- package/docs/module_selenium-webdriver_firefox_binary.html +0 -5
- package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -20
- package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
- package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
- package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
- package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
- package/docs/module_selenium-webdriver_http.html +0 -9
- package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
- package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
- package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
- package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
- package/docs/module_selenium-webdriver_http_util.html +0 -17
- package/docs/module_selenium-webdriver_ie.html +0 -11
- package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
- package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
- package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
- package/docs/module_selenium-webdriver_io.html +0 -37
- package/docs/module_selenium-webdriver_io_exec.html +0 -6
- package/docs/module_selenium-webdriver_namespace_By.html +0 -56
- package/docs/module_selenium-webdriver_namespace_error.html +0 -4
- package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
- package/docs/module_selenium-webdriver_namespace_promise.html +0 -163
- package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
- package/docs/module_selenium-webdriver_namespace_until.html +0 -82
- package/docs/module_selenium-webdriver_net.html +0 -7
- package/docs/module_selenium-webdriver_net_portprober.html +0 -12
- package/docs/module_selenium-webdriver_opera.html +0 -62
- package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
- package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
- package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
- package/docs/module_selenium-webdriver_phantomjs.html +0 -2
- package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
- package/docs/module_selenium-webdriver_proxy.html +0 -28
- package/docs/module_selenium-webdriver_remote.html +0 -8
- package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
- package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
- package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -41
- package/docs/module_selenium-webdriver_safari.html +0 -9
- package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
- package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
- package/docs/module_selenium-webdriver_testing.html +0 -74
- package/docs/module_selenium-webdriver_testing_assert.html +0 -9
- package/docs/namespace_bot.html +0 -4
- package/docs/namespace_bot_json.html +0 -20
- package/docs/namespace_bot_response.html +0 -18
- package/docs/namespace_bot_userAgent.html +0 -33
- package/docs/namespace_webdriver.html +0 -30
- package/docs/namespace_webdriver_By.html +0 -56
- package/docs/namespace_webdriver_http.html +0 -6
- package/docs/namespace_webdriver_logging.html +0 -70
- package/docs/namespace_webdriver_promise.html +0 -688
- package/docs/namespace_webdriver_stacktrace.html +0 -17
- package/docs/namespace_webdriver_testing.html +0 -7
- package/docs/namespace_webdriver_testing_assert.html +0 -9
- package/docs/namespace_webdriver_testing_asserts.html +0 -18
- package/docs/namespace_webdriver_until.html +0 -82
- package/docs/source/_base.js.src.html +0 -1
- package/docs/source/builder.js.src.html +0 -1
- package/docs/source/chrome.js.src.html +0 -1
- package/docs/source/error.js.src.html +0 -1
- package/docs/source/executors.js.src.html +0 -1
- package/docs/source/firefox/binary.js.src.html +0 -1
- package/docs/source/firefox/extension.js.src.html +0 -1
- package/docs/source/firefox/index.js.src.html +0 -1
- package/docs/source/firefox/profile.js.src.html +0 -1
- package/docs/source/http/index.js.src.html +0 -1
- package/docs/source/http/util.js.src.html +0 -1
- package/docs/source/ie.js.src.html +0 -1
- package/docs/source/index.js.src.html +0 -1
- package/docs/source/io/exec.js.src.html +0 -1
- package/docs/source/io/index.js.src.html +0 -1
- package/docs/source/lib/atoms/error.js.src.html +0 -1
- package/docs/source/lib/atoms/json.js.src.html +0 -1
- package/docs/source/lib/atoms/response.js.src.html +0 -1
- package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
- package/docs/source/lib/goog/array/array.js.src.html +0 -1
- package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
- package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
- package/docs/source/lib/goog/async/run.js.src.html +0 -1
- package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
- package/docs/source/lib/goog/base.js.src.html +0 -1
- package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
- package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
- package/docs/source/lib/goog/debug/error.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
- package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
- package/docs/source/lib/goog/deps.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
- package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
- package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
- package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
- package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
- package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
- package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
- package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
- package/docs/source/lib/goog/events/event.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
- package/docs/source/lib/goog/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
- package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
- package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
- package/docs/source/lib/goog/events/listener.js.src.html +0 -1
- package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
- package/docs/source/lib/goog/fs/url.js.src.html +0 -1
- package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
- package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
- package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
- package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
- package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
- package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
- package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
- package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
- package/docs/source/lib/goog/json/json.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
- package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
- package/docs/source/lib/goog/log/log.js.src.html +0 -1
- package/docs/source/lib/goog/math/box.js.src.html +0 -1
- package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
- package/docs/source/lib/goog/math/math.js.src.html +0 -1
- package/docs/source/lib/goog/math/rect.js.src.html +0 -1
- package/docs/source/lib/goog/math/size.js.src.html +0 -1
- package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
- package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
- package/docs/source/lib/goog/object/object.js.src.html +0 -1
- package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
- package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
- package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
- package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
- package/docs/source/lib/goog/string/const.js.src.html +0 -1
- package/docs/source/lib/goog/string/string.js.src.html +0 -1
- package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
- package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
- package/docs/source/lib/goog/structs/map.js.src.html +0 -1
- package/docs/source/lib/goog/structs/set.js.src.html +0 -1
- package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
- package/docs/source/lib/goog/style/style.js.src.html +0 -1
- package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
- package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
- package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
- package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
- package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
- package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
- package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
- package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
- package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
- package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
- package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
- package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
- package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
- package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/button.js.src.html +0 -1
- package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
- package/docs/source/lib/webdriver/command.js.src.html +0 -1
- package/docs/source/lib/webdriver/events.js.src.html +0 -1
- package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
- package/docs/source/lib/webdriver/key.js.src.html +0 -1
- package/docs/source/lib/webdriver/locators.js.src.html +0 -1
- package/docs/source/lib/webdriver/logging.js.src.html +0 -1
- package/docs/source/lib/webdriver/promise.js.src.html +0 -1
- package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
- package/docs/source/lib/webdriver/session.js.src.html +0 -1
- package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
- package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
- package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
- package/docs/source/lib/webdriver/until.js.src.html +0 -1
- package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
- package/docs/source/net/index.js.src.html +0 -1
- package/docs/source/net/portprober.js.src.html +0 -1
- package/docs/source/opera.js.src.html +0 -1
- package/docs/source/phantomjs.js.src.html +0 -1
- package/docs/source/proxy.js.src.html +0 -1
- package/docs/source/remote/index.js.src.html +0 -1
- package/docs/source/safari.js.src.html +0 -1
- package/docs/source/testing/assert.js.src.html +0 -1
- package/docs/source/testing/index.js.src.html +0 -1
- package/docs/types.js +0 -1
- package/lib/atoms/error.js +0 -202
- package/lib/atoms/json.js +0 -80
- package/lib/atoms/response.js +0 -110
- package/lib/atoms/userAgent.js +0 -257
- package/lib/goog/LICENSE +0 -176
- package/lib/goog/array/array.js +0 -1654
- package/lib/goog/asserts/asserts.js +0 -365
- package/lib/goog/async/freelist.js +0 -88
- package/lib/goog/async/nexttick.js +0 -241
- package/lib/goog/async/run.js +0 -133
- package/lib/goog/async/workqueue.js +0 -139
- package/lib/goog/base.js +0 -2548
- package/lib/goog/debug/debug.js +0 -653
- package/lib/goog/debug/entrypointregistry.js +0 -158
- package/lib/goog/debug/error.js +0 -63
- package/lib/goog/debug/logbuffer.js +0 -148
- package/lib/goog/debug/logger.js +0 -873
- package/lib/goog/debug/logrecord.js +0 -242
- package/lib/goog/deps.js +0 -151
- package/lib/goog/disposable/disposable.js +0 -307
- package/lib/goog/disposable/idisposable.js +0 -45
- package/lib/goog/dom/browserfeature.js +0 -72
- package/lib/goog/dom/dom.js +0 -2991
- package/lib/goog/dom/nodetype.js +0 -48
- package/lib/goog/dom/safe.js +0 -347
- package/lib/goog/dom/tagname.js +0 -160
- package/lib/goog/dom/tags.js +0 -41
- package/lib/goog/dom/vendor.js +0 -96
- package/lib/goog/events/browserevent.js +0 -400
- package/lib/goog/events/browserfeature.js +0 -85
- package/lib/goog/events/event.js +0 -143
- package/lib/goog/events/eventid.js +0 -47
- package/lib/goog/events/events.js +0 -984
- package/lib/goog/events/eventtarget.js +0 -394
- package/lib/goog/events/eventtype.js +0 -237
- package/lib/goog/events/keycodes.js +0 -427
- package/lib/goog/events/listenable.js +0 -335
- package/lib/goog/events/listener.js +0 -131
- package/lib/goog/events/listenermap.js +0 -308
- package/lib/goog/fs/url.js +0 -109
- package/lib/goog/functions/functions.js +0 -442
- package/lib/goog/html/safehtml.js +0 -757
- package/lib/goog/html/safescript.js +0 -234
- package/lib/goog/html/safestyle.js +0 -442
- package/lib/goog/html/safestylesheet.js +0 -276
- package/lib/goog/html/safeurl.js +0 -398
- package/lib/goog/html/trustedresourceurl.js +0 -224
- package/lib/goog/html/uncheckedconversions.js +0 -232
- package/lib/goog/i18n/bidi.js +0 -908
- package/lib/goog/iter/iter.js +0 -1302
- package/lib/goog/json/json.js +0 -363
- package/lib/goog/labs/testing/assertthat.js +0 -58
- package/lib/goog/labs/testing/logicmatcher.js +0 -212
- package/lib/goog/labs/testing/matcher.js +0 -80
- package/lib/goog/labs/testing/numbermatcher.js +0 -346
- package/lib/goog/labs/testing/objectmatcher.js +0 -317
- package/lib/goog/labs/testing/stringmatcher.js +0 -415
- package/lib/goog/labs/useragent/browser.js +0 -341
- package/lib/goog/labs/useragent/engine.js +0 -160
- package/lib/goog/labs/useragent/platform.js +0 -160
- package/lib/goog/labs/useragent/util.js +0 -148
- package/lib/goog/log/log.js +0 -197
- package/lib/goog/math/box.js +0 -398
- package/lib/goog/math/coordinate.js +0 -268
- package/lib/goog/math/math.js +0 -451
- package/lib/goog/math/rect.js +0 -476
- package/lib/goog/math/size.js +0 -227
- package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
- package/lib/goog/net/xhrlike.js +0 -124
- package/lib/goog/net/xmlhttp.js +0 -246
- package/lib/goog/net/xmlhttpfactory.js +0 -67
- package/lib/goog/object/object.js +0 -686
- package/lib/goog/promise/promise.js +0 -1350
- package/lib/goog/promise/resolver.js +0 -48
- package/lib/goog/promise/thenable.js +0 -126
- package/lib/goog/reflect/reflect.js +0 -77
- package/lib/goog/string/const.js +0 -182
- package/lib/goog/string/string.js +0 -1599
- package/lib/goog/string/typedstring.js +0 -48
- package/lib/goog/structs/collection.js +0 -56
- package/lib/goog/structs/map.js +0 -457
- package/lib/goog/structs/set.js +0 -279
- package/lib/goog/structs/structs.js +0 -354
- package/lib/goog/style/style.js +0 -2037
- package/lib/goog/testing/asserts.js +0 -1278
- package/lib/goog/testing/events/events.js +0 -767
- package/lib/goog/testing/functionmock.js +0 -175
- package/lib/goog/testing/jsunit.js +0 -162
- package/lib/goog/testing/loosemock.js +0 -242
- package/lib/goog/testing/mock.js +0 -645
- package/lib/goog/testing/mockclock.js +0 -606
- package/lib/goog/testing/mockcontrol.js +0 -220
- package/lib/goog/testing/mockinterface.js +0 -45
- package/lib/goog/testing/mockmatchers.js +0 -400
- package/lib/goog/testing/objectpropertystring.js +0 -68
- package/lib/goog/testing/propertyreplacer.js +0 -262
- package/lib/goog/testing/recordfunction.js +0 -215
- package/lib/goog/testing/stacktrace.js +0 -594
- package/lib/goog/testing/strictmock.js +0 -130
- package/lib/goog/testing/testcase.js +0 -1629
- package/lib/goog/testing/testrunner.js +0 -440
- package/lib/goog/uri/uri.js +0 -1524
- package/lib/goog/uri/utils.js +0 -1064
- package/lib/goog/useragent/product.js +0 -183
- package/lib/goog/useragent/product_isversion.js +0 -144
- package/lib/goog/useragent/useragent.js +0 -572
- package/lib/webdriver/actionsequence.js +0 -356
- package/lib/webdriver/builder.js +0 -207
- package/lib/webdriver/capabilities.js +0 -412
- package/lib/webdriver/events.js +0 -179
- package/lib/webdriver/firefoxdomexecutor.js +0 -175
- package/lib/webdriver/http/corsclient.js +0 -133
- package/lib/webdriver/http/http.js +0 -525
- package/lib/webdriver/http/xhrclient.js +0 -67
- package/lib/webdriver/locators.js +0 -257
- package/lib/webdriver/logging.js +0 -347
- package/lib/webdriver/session.js +0 -74
- package/lib/webdriver/stacktrace.js +0 -619
- package/lib/webdriver/test/builder_test.js +0 -53
- package/lib/webdriver/test/capabilities_test.js +0 -72
- package/lib/webdriver/test/events_test.js +0 -203
- package/lib/webdriver/test/http/corsclient_test.js +0 -151
- package/lib/webdriver/test/http/http_test.js +0 -428
- package/lib/webdriver/test/http/xhrclient_test.js +0 -196
- package/lib/webdriver/test/locators_test.js +0 -59
- package/lib/webdriver/test/logging_test.js +0 -85
- package/lib/webdriver/test/promise_error_test.js +0 -892
- package/lib/webdriver/test/promise_flow_test.js +0 -2365
- package/lib/webdriver/test/promise_generator_test.js +0 -323
- package/lib/webdriver/test/promise_test.js +0 -2012
- package/lib/webdriver/test/stacktrace_test.js +0 -480
- package/lib/webdriver/test/test_bootstrap.js +0 -67
- package/lib/webdriver/test/testing/asserts_test.js +0 -117
- package/lib/webdriver/test/testing/client_test.js +0 -88
- package/lib/webdriver/test/testing/testcase_test.js +0 -229
- package/lib/webdriver/test/testutil.js +0 -209
- package/lib/webdriver/test/testutil_test.js +0 -104
- package/lib/webdriver/test/until_test.js +0 -411
- package/lib/webdriver/test/webdriver_generator_test.js +0 -92
- package/lib/webdriver/test/webdriver_test.js +0 -2369
- package/lib/webdriver/testing/asserts.js +0 -487
- package/lib/webdriver/testing/client.js +0 -179
- package/lib/webdriver/testing/jsunit.js +0 -363
- package/lib/webdriver/testing/testcase.js +0 -168
- package/lib/webdriver/testing/window.js +0 -244
- package/lib/webdriver/touchsequence.js +0 -248
- package/lib/webdriver/until.js +0 -412
- package/lib/webdriver/webdriver.js +0 -2511
- 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 &lt;}, 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 < 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('');
|
package/lib/goog/html/safeurl.js
DELETED
|
@@ -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. "http" for "http".
|
|
322
|
-
* It also disallows HTML entities in the first path part of a relative path,
|
|
323
|
-
* e.g. "foo<bar/baz". Our existing escaping functions should not produce
|
|
324
|
-
* that. More importantly, it disallows masking of a colon,
|
|
325
|
-
* e.g. "javascript:...".
|
|
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
|
-
};
|