| Index: chrome/browser/devtools/devtools_sanity_browsertest.cc
|
| diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
|
| index 318cdfb219f56b33a6d1036004e5e4957d567bb0..e489e6ecc36dee1973d597bfb923d76e8ebc3cb9 100644
|
| --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
|
| +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
|
| @@ -965,6 +965,78 @@ IN_PROC_BROWSER_TEST_F(DevToolsExtensionTest, DevToolsExtensionWithHttpIframe) {
|
| }
|
| }
|
|
|
| +// Some web features, when used from an extension, are subject to browser-side
|
| +// security policy enforcement. Make sure they work properly from inside a
|
| +// devtools extension.
|
| +IN_PROC_BROWSER_TEST_F(DevToolsExtensionTest,
|
| + DevToolsExtensionSecurityPolicyGrants) {
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| +
|
| + std::unique_ptr<extensions::TestExtensionDir> dir(
|
| + new extensions::TestExtensionDir());
|
| +
|
| + extensions::DictionaryBuilder manifest;
|
| + dir->WriteManifest(extensions::DictionaryBuilder()
|
| + .Set("name", "Devtools Panel")
|
| + .Set("version", "1")
|
| + .Set("manifest_version", 2)
|
| + .Set("devtools_page", "devtools.html")
|
| + .ToJSON());
|
| +
|
| + dir->WriteFile(
|
| + FILE_PATH_LITERAL("devtools.html"),
|
| + "<html><head><script src='devtools.js'></script></head></html>");
|
| +
|
| + dir->WriteFile(
|
| + FILE_PATH_LITERAL("devtools.js"),
|
| + "chrome.devtools.panels.create('the_panel_name',\n"
|
| + " null,\n"
|
| + " 'panel.html',\n"
|
| + " function(panel) {\n"
|
| + " chrome.devtools.inspectedWindow.eval('console.log(\"PASS\")');\n"
|
| + " }\n"
|
| + ");\n");
|
| +
|
| + dir->WriteFile(FILE_PATH_LITERAL("panel.html"),
|
| + "<html><body>A panel."
|
| + "<script src='blob_xhr.js'></script>"
|
| + "</body></html>");
|
| + // Creating blobs from chrome-extension:// origins is only permitted if the
|
| + // process has been granted permission to commit 'chrome-extension' schemes.
|
| + dir->WriteFile(
|
| + FILE_PATH_LITERAL("blob_xhr.js"),
|
| + "var blob_url = URL.createObjectURL(new Blob(['blob contents']));\n"
|
| + "var xhr = new XMLHttpRequest();\n"
|
| + "xhr.open('GET', blob_url, true);\n"
|
| + "xhr.onload = function (e) {\n"
|
| + " domAutomationController.setAutomationId(0);\n"
|
| + " domAutomationController.send(xhr.response);\n"
|
| + "};\n"
|
| + "xhr.send(null);\n");
|
| + // Install the extension.
|
| + const Extension* extension = LoadExtensionFromPath(dir->UnpackedPath());
|
| + ASSERT_TRUE(extension);
|
| +
|
| + // Open a devtools window.
|
| + OpenDevToolsWindow(kDebuggerTestPage, false);
|
| +
|
| + // Wait for the panel extension to finish loading -- it'll output 'PASS'
|
| + // when it's installed. waitForTestResultsInConsole waits until that 'PASS'.
|
| + RunTestFunction(window_, "waitForTestResultsInConsole");
|
| +
|
| + // Now that we know the panel is loaded, switch to it. We'll wait until we
|
| + // see a 'DONE' message sent from popup_iframe.html, indicating that it
|
| + // loaded successfully.
|
| + content::DOMMessageQueue message_queue;
|
| + SwitchToExtensionPanel(window_, extension, "the_panel_name");
|
| + std::string message;
|
| + while (true) {
|
| + ASSERT_TRUE(message_queue.WaitForMessage(&message));
|
| + if (message == "\"blob contents\"")
|
| + break;
|
| + }
|
| +}
|
| +
|
| // Disabled on Windows due to flakiness. http://crbug.com/183649
|
| #if defined(OS_WIN)
|
| #define MAYBE_TestDevToolsExtensionMessaging DISABLED_TestDevToolsExtensionMessaging
|
|
|