Index: chrome/browser/ui/webui/devtools_ui_unittest.cc |
diff --git a/chrome/browser/ui/webui/devtools_ui_unittest.cc b/chrome/browser/ui/webui/devtools_ui_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7cc7585778094d16fd33e463d28bcd12755772a9 |
--- /dev/null |
+++ b/chrome/browser/ui/webui/devtools_ui_unittest.cc |
@@ -0,0 +1,102 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/webui/devtools_ui.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class DevToolsUITest : public testing::Test { |
+}; |
+ |
+TEST_F(DevToolsUITest, SanitizeFrontendURL) { |
+ std::vector<std::pair<std::string, std::string>> tests = { |
+ {"random-string", |
+ "chrome-devtools://devtools/"}, |
+ {"http://valid.url/but/wrong", |
+ "chrome-devtools://devtools/but/wrong"}, |
+ {"chrome-devtools://wrong-domain/", |
+ "chrome-devtools://devtools/"}, |
+ {"chrome-devtools://devtools/bundled/devtools.html", |
+ "chrome-devtools://devtools/bundled/devtools.html"}, |
+ {"chrome-devtools://devtools:1234/bundled/devtools.html#hash", |
+ "chrome-devtools://devtools/bundled/devtools.html"}, |
+ {"chrome-devtools://devtools/some/random/path", |
+ "chrome-devtools://devtools/some/random/path"}, |
+ {"chrome-devtools://devtools/bundled/devtools.html?experiments=true", |
+ "chrome-devtools://devtools/bundled/devtools.html?experiments=true"}, |
+ {"chrome-devtools://devtools/bundled/devtools.html" |
+ "?some-flag=flag&v8only=true&experiments=false&debugFrontend=a" |
+ "&another-flag=another-flag&can_dock=false&isSharedWorker=notreally" |
+ "&remoteFrontend=sure", |
+ "chrome-devtools://devtools/bundled/devtools.html" |
+ "?v8only=true&experiments=true&debugFrontend=true" |
+ "&can_dock=true&isSharedWorker=true&remoteFrontend=true"}, |
+ {"chrome-devtools://devtools/?ws=any-value-is-fine", |
+ "chrome-devtools://devtools/?ws=any-value-is-fine"}, |
+ {"chrome-devtools://devtools/" |
+ "?service-backend=ws://localhost:9222/services", |
+ "chrome-devtools://devtools/" |
+ "?service-backend=ws://localhost:9222/services"}, |
+ {"chrome-devtools://devtools/?dockSide=undocked", |
+ "chrome-devtools://devtools/?dockSide=undocked"}, |
+ {"chrome-devtools://devtools/?dockSide=dock-to-bottom", |
+ "chrome-devtools://devtools/"}, |
+ {"chrome-devtools://devtools/?dockSide=bottom", |
+ "chrome-devtools://devtools/"}, |
+ {"chrome-devtools://devtools/?remoteBase=" |
+ "http://example.com:1234/remote-base#hash", |
+ "chrome-devtools://devtools/?remoteBase=" |
+ "https://chrome-devtools-frontend.appspot.com/" |
+ "serve_file//"}, |
+ {"chrome-devtools://devtools/?ws=1%26evil%3dtrue", |
+ "chrome-devtools://devtools/?ws=1%26evil%3dtrue"}, |
+ {"chrome-devtools://devtools/?remoteBase=" |
+ "https://chrome-devtools-frontend.appspot.com/some/path/" |
+ "@123719741873/more/path.html", |
+ "chrome-devtools://devtools/?remoteBase=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_file/path/"}, |
+ {"chrome-devtools://devtools/?remoteBase=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_file/" |
+ "@123719741873/inspector.html%3FdebugFrontend%3Dfalse", |
+ "chrome-devtools://devtools/?remoteBase=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_file/" |
+ "@123719741873/"}, |
+ {"chrome-devtools://devtools/bundled/inspector.html?" |
+ "&remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" |
+ "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true", |
+ "chrome-devtools://devtools/bundled/inspector.html?" |
+ "remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" |
+ "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true"}, |
+ {"chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_rev/" |
+ "@12345/inspector.html%3FdebugFrontend%3Dfalse", |
+ "chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" |
+ "%2F%4012345%2Finspector.html%3FdebugFrontend%3Dtrue"}, |
+ {"chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_rev/" |
+ "@12345/inspector.html%22></iframe>something", |
+ "chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" |
+ "%2F%4012345%2Finspector.html"}, |
+ {"chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "http://domain:1234/path/rev/a/filename.html%3Fparam%3Dvalue#hash", |
+ "chrome-devtools://devtools/?remoteFrontendUrl=" |
+ "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" |
+ "%2Frev%2Finspector.html"}, |
+ {"chrome-devtools://devtools/?experiments=whatever&remoteFrontendUrl=" |
+ "https://chrome-devtools-frontend.appspot.com/serve_rev/" |
+ "@12345/devtools.html%3Fws%3Danyvalue%26experiments%3Dlikely" |
+ "&unencoded=value&debugFrontend=true", |
+ "chrome-devtools://devtools/?experiments=true&remoteFrontendUrl=" |
+ "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" |
+ "%2F%4012345%2Fdevtools.html%3Fws%3Danyvalue%26experiments%3Dtrue" |
+ "&debugFrontend=true"}, |
+ }; |
+ |
+ for (const auto& pair : tests) { |
+ GURL url = GURL(pair.first); |
+ url = DevToolsUI::SanitizeFrontendURL(url); |
+ EXPECT_EQ(pair.second, url.spec()); |
+ } |
+} |