diff options
-rw-r--r-- | chrome/browser/extensions/all_urls_apitest.cc | 125 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_test_message_listener.cc | 5 | ||||
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 6 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 |
4 files changed, 137 insertions, 0 deletions
diff --git a/chrome/browser/extensions/all_urls_apitest.cc b/chrome/browser/extensions/all_urls_apitest.cc new file mode 100644 index 0000000..88387e5 --- /dev/null +++ b/chrome/browser/extensions/all_urls_apitest.cc @@ -0,0 +1,125 @@ +// Copyright (c) 2010 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/browser.h" +#include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/extensions/extension_test_message_listener.h" +#include "chrome/browser/extensions/extensions_service.h" +#include "chrome/browser/profile.h" +#include "chrome/common/extensions/extension.h" +#include "chrome/test/ui_test_utils.h" + +const std::string kAllUrlsTarget = + "files/extensions/api_test/all_urls/index.html"; + +typedef ExtensionApiTest AllUrlsApiTest; + +// TODOf Remove. +void Dbg(char* msg) { + std::cout << "**** " << msg << "\n" << std::flush; +} + +IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, WhitelistedExtension) { + // First add the two extensions we are going to load to the whitelist. + const char* kCanExecuteScriptsEverywhere[] = { + "fekpfaahmgnelcjpkefdnpiofglcgmgo", + "bpkfbiacjfimfmglhncgmibnddpnhmoj", + }; + Dbg("Set Whitelist"); + Extension::SetScriptingWhitelist(kCanExecuteScriptsEverywhere, + arraysize(kCanExecuteScriptsEverywhere)); + + + // Then load the two extension. + FilePath extension_dir1 = test_data_dir_.AppendASCII("all_urls") + .AppendASCII("content_script"); + FilePath extension_dir2 = test_data_dir_.AppendASCII("all_urls") + .AppendASCII("execute_script"); + + ExtensionsService* service = browser()->profile()->GetExtensionsService(); + const size_t size_before = service->extensions()->size(); + ASSERT_TRUE(LoadExtension(extension_dir1)); + ASSERT_TRUE(LoadExtension(extension_dir2)); + EXPECT_EQ(size_before + 2, service->extensions()->size()); + + std::string url; + + Dbg("Extensions loaded"); + + // Now verify we run content scripts on chrome://newtab/. + url = "chrome://newtab/"; + ExtensionTestMessageListener listener1a("content script: " + url); + ExtensionTestMessageListener listener1b("execute: " + url); + ui_test_utils::NavigateToURL(browser(), GURL(url)); + Dbg("Listening on 1a"); + ASSERT_TRUE(listener1a.WaitUntilSatisfied()); + Dbg("Listening on 1b"); + ASSERT_TRUE(listener1b.WaitUntilSatisfied()); + + // Now verify data: urls. + url = "data:text/html;charset=utf-8,<html>asdf</html>"; + ExtensionTestMessageListener listener2a("content script: " + url); + ExtensionTestMessageListener listener2b("execute: " + url); + ui_test_utils::NavigateToURL(browser(), GURL(url)); + Dbg("Listening on 2a"); + ASSERT_TRUE(listener2a.WaitUntilSatisfied()); + Dbg("Listening on 2b"); + ASSERT_TRUE(listener2b.WaitUntilSatisfied()); + + // Now verify about:version. + url = "about:version"; + ExtensionTestMessageListener listener3a("content script: " + url); + ExtensionTestMessageListener listener3b("execute: " + url); + ui_test_utils::NavigateToURL(browser(), GURL(url)); + Dbg("Listening on 3a"); + ASSERT_TRUE(listener3a.WaitUntilSatisfied()); + Dbg("Listening on 3b"); + ASSERT_TRUE(listener3b.WaitUntilSatisfied()); + + // Now verify about:blank. + url = "about:blank"; + ExtensionTestMessageListener listener4a("content script: " + url); + ExtensionTestMessageListener listener4b("execute: " + url); + ui_test_utils::NavigateToURL(browser(), GURL(url)); + Dbg("Listening on 4a"); + ASSERT_TRUE(listener4a.WaitUntilSatisfied()); + Dbg("Listening on 4b"); + ASSERT_TRUE(listener4b.WaitUntilSatisfied()); + + // Now verify we can script a regular http page. + ASSERT_TRUE(test_server()->Start()); + GURL page_url = test_server()->GetURL(kAllUrlsTarget); + ExtensionTestMessageListener listener5a("content script: " + page_url.spec()); + ExtensionTestMessageListener listener5b("execute: " + page_url.spec()); + ui_test_utils::NavigateToURL(browser(), page_url); + Dbg("Listening on 5a"); + ASSERT_TRUE(listener5a.WaitUntilSatisfied()); + Dbg("Listening on 5b"); + ASSERT_TRUE(listener5b.WaitUntilSatisfied()); +} + +// Test that an extension NOT whitelisted for scripting can ask for <all_urls> +// and run scripts on non-restricted all pages. +IN_PROC_BROWSER_TEST_F(AllUrlsApiTest, RegularExtensions) { + // First load the two extension. + FilePath extension_dir1 = test_data_dir_.AppendASCII("all_urls") + .AppendASCII("content_script"); + FilePath extension_dir2 = test_data_dir_.AppendASCII("all_urls") + .AppendASCII("execute_script"); + + ExtensionsService* service = browser()->profile()->GetExtensionsService(); + const size_t size_before = service->extensions()->size(); + ASSERT_TRUE(LoadExtension(extension_dir1)); + ASSERT_TRUE(LoadExtension(extension_dir2)); + EXPECT_EQ(size_before + 2, service->extensions()->size()); + + // Now verify we can script a regular http page. + ASSERT_TRUE(test_server()->Start()); + GURL page_url = test_server()->GetURL(kAllUrlsTarget); + ExtensionTestMessageListener listener1a("content script: " + page_url.spec()); + ExtensionTestMessageListener listener1b("execute: " + page_url.spec()); + ui_test_utils::NavigateToURL(browser(), page_url); + ASSERT_TRUE(listener1a.WaitUntilSatisfied()); + ASSERT_TRUE(listener1b.WaitUntilSatisfied()); +} diff --git a/chrome/browser/extensions/extension_test_message_listener.cc b/chrome/browser/extensions/extension_test_message_listener.cc index bfa9db7..73e2d8a 100644 --- a/chrome/browser/extensions/extension_test_message_listener.cc +++ b/chrome/browser/extensions/extension_test_message_listener.cc @@ -8,6 +8,9 @@ #include "chrome/common/notification_type.h" #include "chrome/test/ui_test_utils.h" +// TODOf remove. +#include <iostream> + ExtensionTestMessageListener::ExtensionTestMessageListener( const std::string& expected_message) : expected_message_(expected_message), satisfied_(false), @@ -31,6 +34,8 @@ void ExtensionTestMessageListener::Observe( const NotificationSource& source, const NotificationDetails& details) { const std::string& content = *Details<std::string>(details).ptr(); + // TODOf remove. + std::cout << "**** Observed: '" << content.c_str() << "', expected: '" << expected_message_.c_str() << "'\n" << std::flush; if (!satisfied_ && content == expected_message_) { satisfied_ = true; registrar_.RemoveAll(); // Stop listening for more messages. diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index 9e8b99e..0cd43ff 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -77,6 +77,8 @@ using WebKit::WebCache; #include "third_party/skia/include/core/SkBitmap.h" +// TODOf remove. +#include <iostream> // This class creates the IO thread for the renderer when running in // single-process mode. It's not used in multi-process mode. @@ -711,6 +713,10 @@ void BrowserRenderProcessHost::SendExtensionInfo() { if (info.icon_url.is_empty()) info.icon_url = GURL("chrome://theme/IDR_APP_DEFAULT_ICON"); params.extensions.push_back(info); + + // TODOf remove. + std::cout << "**** SendExtensionInfo: '" << info.name.c_str() << "'\n" << std::flush; + std::cout << "**** SendExtensionInfo: '" << info.allowed_to_execute_script_everywhere << "'\n" << std::flush; } Send(new ViewMsg_ExtensionsUpdated(params)); diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 1ebb39d..4632e95 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1881,6 +1881,7 @@ 'browser/dom_ui/mediaplayer_browsertest.cc', 'browser/download/save_page_browsertest.cc', 'browser/extensions/alert_apitest.cc', + 'browser/extensions/all_urls_apitest.cc', 'browser/extensions/app_background_page_apitest.cc', 'browser/extensions/app_process_apitest.cc', 'browser/extensions/autoupdate_interceptor.cc', |