| Index: chrome/browser/debugger/devtools_extension_debug_unittest.cc
|
| diff --git a/chrome/browser/debugger/devtools_extension_debug_unittest.cc b/chrome/browser/debugger/devtools_extension_debug_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1e6d47b657cf7f76a7b093a329e8e6fbe71c12d4
|
| --- /dev/null
|
| +++ b/chrome/browser/debugger/devtools_extension_debug_unittest.cc
|
| @@ -0,0 +1,137 @@
|
| +// Copyright (c) 2011 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 "base/path_service.h"
|
| +#include "base/test/test_timeouts.h"
|
| +#include "chrome/browser/extensions/extension_host.h"
|
| +#include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| +#include "chrome/test/ui_test_utils.h"
|
| +#include "content/browser/debugger/devtools_sanity_unittest.h"
|
| +#include "content/common/notification_service.h"
|
| +
|
| +namespace {
|
| +
|
| +class CancelableQuitTask : public Task {
|
| + public:
|
| + explicit CancelableQuitTask( const std::string& timeout_message)
|
| + : timeout_message_(timeout_message),
|
| + cancelled_(false) {
|
| + }
|
| +
|
| + void cancel() {
|
| + cancelled_ = true;
|
| + }
|
| +
|
| + virtual void Run() {
|
| + if (cancelled_) {
|
| + return;
|
| + }
|
| + FAIL() << timeout_message_;
|
| + MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + private:
|
| + std::string timeout_message_;
|
| + bool cancelled_;
|
| +};
|
| +
|
| +const char kPageWithContentScript[] =
|
| + "files/devtools/page_with_content_script.html";
|
| +
|
| +// Base class for DevTools tests that test devtools functionality for
|
| +// extensions and content scripts.
|
| +class DevToolsExtensionDebugTest : public DevToolsSanityTest,
|
| + public NotificationObserver {
|
| + public:
|
| + DevToolsExtensionDebugTest() : DevToolsSanityTest() {
|
| + PathService::Get(chrome::DIR_TEST_DATA, &test_extensions_dir_);
|
| + test_extensions_dir_ = test_extensions_dir_.AppendASCII("devtools");
|
| + test_extensions_dir_ = test_extensions_dir_.AppendASCII("extensions");
|
| + }
|
| +
|
| + protected:
|
| + // Load an extention from test\data\devtools\extensions\<extension_name>
|
| + void LoadExtension(const char* extension_name) {
|
| + FilePath path = test_extensions_dir_.AppendASCII(extension_name);
|
| + ASSERT_TRUE(LoadExtensionFromPath(path)) << "Failed to load extension.";
|
| + }
|
| +
|
| + private:
|
| + bool LoadExtensionFromPath(const FilePath& path) {
|
| + ExtensionService* service = browser()->profile()->GetExtensionService();
|
| + size_t num_before = service->extensions()->size();
|
| + {
|
| + NotificationRegistrar registrar;
|
| + registrar.Add(this, NotificationType::EXTENSION_LOADED,
|
| + NotificationService::AllSources());
|
| + CancelableQuitTask* delayed_quit =
|
| + new CancelableQuitTask("Extension load timed out.");
|
| + MessageLoop::current()->PostDelayedTask(
|
| + FROM_HERE, delayed_quit, 2 * TestTimeouts::action_timeout_ms());
|
| + service->LoadExtension(path);
|
| + ui_test_utils::RunMessageLoop();
|
| + delayed_quit->cancel();
|
| + }
|
| + size_t num_after = service->extensions()->size();
|
| + if (num_after != (num_before + 1))
|
| + return false;
|
| +
|
| + return WaitForExtensionHostsToLoad();
|
| + }
|
| +
|
| + bool WaitForExtensionHostsToLoad() {
|
| + // Wait for all the extension hosts that exist to finish loading.
|
| + // NOTE: This assumes that the extension host list is not changing while
|
| + // this method is running.
|
| +
|
| + NotificationRegistrar registrar;
|
| + registrar.Add(this, NotificationType::EXTENSION_HOST_DID_STOP_LOADING,
|
| + NotificationService::AllSources());
|
| + CancelableQuitTask* delayed_quit =
|
| + new CancelableQuitTask("Extension host load timed out.");
|
| + MessageLoop::current()->PostDelayedTask(
|
| + FROM_HERE, delayed_quit, 2 * TestTimeouts::action_timeout_ms());
|
| +
|
| + ExtensionProcessManager* manager =
|
| + browser()->profile()->GetExtensionProcessManager();
|
| + for (ExtensionProcessManager::const_iterator iter = manager->begin();
|
| + iter != manager->end();) {
|
| + if ((*iter)->did_stop_loading())
|
| + ++iter;
|
| + else
|
| + ui_test_utils::RunMessageLoop();
|
| + }
|
| +
|
| + delayed_quit->cancel();
|
| + return true;
|
| + }
|
| +
|
| + void Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + switch (type.value) {
|
| + case NotificationType::EXTENSION_LOADED:
|
| + case NotificationType::EXTENSION_HOST_DID_STOP_LOADING:
|
| + MessageLoopForUI::current()->Quit();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + FilePath test_extensions_dir_;
|
| +};
|
| +
|
| +// Tests that a content script is in the scripts list.
|
| +// This test is disabled, see bug 28961.
|
| +IN_PROC_BROWSER_TEST_F(DevToolsExtensionDebugTest,
|
| + TestContentScriptIsPresent) {
|
| + LoadExtension("simple_content_script");
|
| + RunTest("testContentScriptIsPresent", kPageWithContentScript);
|
| +}
|
| +
|
| +} // namespace
|
|
|