Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1769)

Unified Diff: chrome/browser/extensions/chrome_extension_test_notification_observer.cc

Issue 2393343002: Split ExtensionTestObserver and move to //extensions. (Closed)
Patch Set: fix bug in ActivityLogApiTest.TriggerEvent Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/chrome_extension_test_notification_observer.cc
diff --git a/chrome/browser/extensions/extension_test_notification_observer.cc b/chrome/browser/extensions/chrome_extension_test_notification_observer.cc
similarity index 21%
copy from chrome/browser/extensions/extension_test_notification_observer.cc
copy to chrome/browser/extensions/chrome_extension_test_notification_observer.cc
index a9f3d8f2084d5afddb962c7af15634102ca6f833..4c6dc3d7938625e39a4ed8a752b7325e717ab38e 100644
--- a/chrome/browser/extensions/extension_test_notification_observer.cc
+++ b/chrome/browser/extensions/chrome_extension_test_notification_observer.cc
@@ -1,27 +1,17 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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/extensions/extension_test_notification_observer.h"
-
-#include <stddef.h>
-
-#include "base/callback_list.h"
+#include <chrome/browser/extensions/chrome_extension_test_notification_observer.h>
#include "base/scoped_observer.h"
#include "chrome/browser/extensions/extension_action_test_util.h"
-#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/test/test_utils.h"
-#include "extensions/browser/extension_system.h"
+#include "content/public/browser/browser_context.h"
+#include "extensions/browser/notification_types.h"
#include "extensions/browser/process_manager.h"
-#include "extensions/browser/process_manager_observer.h"
#include "extensions/common/extension.h"
using extensions::Extension;
@@ -30,13 +20,14 @@ namespace {
// A callback that returns true if the condition has been met and takes no
// arguments.
-typedef base::Callback<bool(void)> ConditionCallback;
+using ConditionCallback = base::Callback<bool(void)>;
bool HasPageActionVisibilityReachedTarget(
- Browser* browser, size_t target_visible_page_action_count) {
+ Browser* browser,
+ size_t target_visible_page_action_count) {
return extensions::extension_action_test_util::GetVisiblePageActionCount(
- browser->tab_strip_model()->GetActiveWebContents()) ==
- target_visible_page_action_count;
+ browser->tab_strip_model()->GetActiveWebContents()) ==
+ target_visible_page_action_count;
}
bool HaveAllExtensionRenderFrameHostsFinishedLoading(
@@ -49,128 +40,44 @@ bool HaveAllExtensionRenderFrameHostsFinishedLoading(
return true;
}
-bool IsExtensionNotIdle(const std::string& extension_id,
- content::BrowserContext* context) {
- return !extensions::util::IsExtensionIdle(extension_id, context);
-}
-
} // namespace
////////////////////////////////////////////////////////////////////////////////
-// ExtensionTestNotificationObserver::NotificationSet
-
-class ExtensionTestNotificationObserver::NotificationSet
- : public content::NotificationObserver,
- public extensions::ProcessManagerObserver {
- public:
- NotificationSet() : process_manager_observer_(this) {}
- ~NotificationSet() override {}
-
- void Add(int type, const content::NotificationSource& source);
- void Add(int type);
- void AddExtensionFrameUnregistration(extensions::ProcessManager* manager);
-
- // Notified any time an Add()ed notification is received.
- // The details of the notification are dropped.
- base::CallbackList<void()>& callback_list() {
- return callback_list_;
- }
-
- private:
- // content::NotificationObserver:
- void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) override;
-
- // extensions::ProcessManagerObserver:
- void OnExtensionFrameUnregistered(
- const std::string& extension_id,
- content::RenderFrameHost* render_frame_host) override;
-
- content::NotificationRegistrar notification_registrar_;
- base::CallbackList<void()> callback_list_;
- ScopedObserver<extensions::ProcessManager, extensions::ProcessManagerObserver>
- process_manager_observer_;
-};
-
-void ExtensionTestNotificationObserver::NotificationSet::Add(
- int type,
- const content::NotificationSource& source) {
- notification_registrar_.Add(this, type, source);
-}
-
-void ExtensionTestNotificationObserver::NotificationSet::Add(int type) {
- Add(type, content::NotificationService::AllSources());
-}
-
-void ExtensionTestNotificationObserver::NotificationSet::
- AddExtensionFrameUnregistration(extensions::ProcessManager* manager) {
- process_manager_observer_.Add(manager);
-}
-
-void ExtensionTestNotificationObserver::NotificationSet::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- callback_list_.Notify();
-}
-
-void ExtensionTestNotificationObserver::NotificationSet::
- OnExtensionFrameUnregistered(const std::string& extension_id,
- content::RenderFrameHost* render_frame_host) {
- callback_list_.Notify();
-}
-
-////////////////////////////////////////////////////////////////////////////////
// ExtensionTestNotificationObserver
-ExtensionTestNotificationObserver::ExtensionTestNotificationObserver(
- Browser* browser)
- : browser_(browser),
- profile_(NULL),
- extension_installs_observed_(0),
- extension_load_errors_observed_(0),
- crx_installers_done_observed_(0) {
-}
+ChromeExtensionTestNotificationObserver::
+ ChromeExtensionTestNotificationObserver(Browser* browser)
+ : ExtensionTestNotificationObserver(browser ? browser->profile() : nullptr),
+ browser_(browser) {}
-ExtensionTestNotificationObserver::~ExtensionTestNotificationObserver() {}
+ChromeExtensionTestNotificationObserver::
+ ~ChromeExtensionTestNotificationObserver() {}
-Profile* ExtensionTestNotificationObserver::GetProfile() {
- if (!profile_) {
+content::BrowserContext*
+ChromeExtensionTestNotificationObserver::GetBrowserContext() {
+ if (!context_) {
if (browser_)
- profile_ = browser_->profile();
+ context_ = browser_->profile();
else
- profile_ = ProfileManager::GetActiveUserProfile();
+ context_ = ProfileManager::GetActiveUserProfile();
}
- return profile_;
-}
-
-void ExtensionTestNotificationObserver::WaitForNotification(
- int notification_type) {
- // TODO(bauerb): Using a WindowedNotificationObserver like this can break
- // easily, if the notification we're waiting for is sent before this method.
- // Change it so that the WindowedNotificationObserver is constructed earlier.
- content::NotificationRegistrar registrar;
- registrar.Add(
- this, notification_type, content::NotificationService::AllSources());
- content::WindowedNotificationObserver(
- notification_type, content::NotificationService::AllSources()).Wait();
+ return context_;
}
-bool ExtensionTestNotificationObserver::WaitForPageActionVisibilityChangeTo(
- int count) {
- extensions::ExtensionActionAPI::Get(GetProfile())->AddObserver(this);
+bool ChromeExtensionTestNotificationObserver::
+ WaitForPageActionVisibilityChangeTo(int count) {
+ ScopedObserver<extensions::ExtensionActionAPI,
+ extensions::ExtensionActionAPI::Observer>
+ observer(this);
+ observer.Add(extensions::ExtensionActionAPI::Get(GetBrowserContext()));
WaitForCondition(
- base::Bind(&HasPageActionVisibilityReachedTarget, browser_, count),
- NULL);
- extensions::ExtensionActionAPI::Get(GetProfile())->
- RemoveObserver(this);
+ base::Bind(&HasPageActionVisibilityReachedTarget, browser_, count), NULL);
return true;
}
-bool ExtensionTestNotificationObserver::WaitForExtensionViewsToLoad() {
+bool ChromeExtensionTestNotificationObserver::WaitForExtensionViewsToLoad() {
extensions::ProcessManager* manager =
- extensions::ProcessManager::Get(GetProfile());
+ extensions::ProcessManager::Get(GetBrowserContext());
NotificationSet notification_set;
notification_set.Add(content::NOTIFICATION_WEB_CONTENTS_DESTROYED);
notification_set.Add(content::NOTIFICATION_LOAD_STOP);
@@ -181,148 +88,37 @@ bool ExtensionTestNotificationObserver::WaitForExtensionViewsToLoad() {
return true;
}
-bool ExtensionTestNotificationObserver::WaitForExtensionIdle(
+bool ChromeExtensionTestNotificationObserver::WaitForExtensionIdle(
const std::string& extension_id) {
NotificationSet notification_set;
notification_set.Add(content::NOTIFICATION_RENDERER_PROCESS_TERMINATED);
WaitForCondition(base::Bind(&extensions::util::IsExtensionIdle, extension_id,
- GetProfile()),
+ GetBrowserContext()),
&notification_set);
return true;
}
-bool ExtensionTestNotificationObserver::WaitForExtensionNotIdle(
+bool ChromeExtensionTestNotificationObserver::WaitForExtensionNotIdle(
const std::string& extension_id) {
NotificationSet notification_set;
notification_set.Add(content::NOTIFICATION_LOAD_STOP);
- WaitForCondition(base::Bind(&IsExtensionNotIdle, extension_id, GetProfile()),
+ WaitForCondition(base::Bind(
+ [](const std::string& extension_id,
+ content::BrowserContext* context) -> bool {
+ return !extensions::util::IsExtensionIdle(extension_id,
+ context);
+ },
+ extension_id, GetBrowserContext()),
&notification_set);
return true;
}
-bool ExtensionTestNotificationObserver::WaitForExtensionInstallError() {
- int before = extension_installs_observed_;
- content::WindowedNotificationObserver(
- extensions::NOTIFICATION_EXTENSION_INSTALL_ERROR,
- content::NotificationService::AllSources()).Wait();
- return extension_installs_observed_ == before;
-}
-
-void ExtensionTestNotificationObserver::WaitForExtensionLoad() {
- WaitForNotification(extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED);
-}
-
-void ExtensionTestNotificationObserver::WaitForExtensionAndViewLoad() {
- this->WaitForExtensionLoad();
+void ChromeExtensionTestNotificationObserver::WaitForExtensionAndViewLoad() {
+ WaitForExtensionLoad();
WaitForExtensionViewsToLoad();
}
-bool ExtensionTestNotificationObserver::WaitForExtensionLoadError() {
- int before = extension_load_errors_observed_;
- WaitForNotification(extensions::NOTIFICATION_EXTENSION_LOAD_ERROR);
- return extension_load_errors_observed_ != before;
-}
-
-bool ExtensionTestNotificationObserver::WaitForExtensionCrash(
- const std::string& extension_id) {
- ExtensionService* service = extensions::ExtensionSystem::Get(
- GetProfile())->extension_service();
-
- if (!service->GetExtensionById(extension_id, true)) {
- // The extension is already unloaded, presumably due to a crash.
- return true;
- }
- content::WindowedNotificationObserver(
- extensions::NOTIFICATION_EXTENSION_PROCESS_TERMINATED,
- content::NotificationService::AllSources()).Wait();
- return (service->GetExtensionById(extension_id, true) == NULL);
-}
-
-bool ExtensionTestNotificationObserver::WaitForCrxInstallerDone() {
- int before = crx_installers_done_observed_;
- WaitForNotification(extensions::NOTIFICATION_CRX_INSTALLER_DONE);
- return crx_installers_done_observed_ == (before + 1);
-}
-
-void ExtensionTestNotificationObserver::Watch(
- int type,
- const content::NotificationSource& source) {
- CHECK(!observer_);
- observer_.reset(new content::WindowedNotificationObserver(type, source));
- registrar_.Add(this, type, source);
-}
-
-void ExtensionTestNotificationObserver::Wait() {
- observer_->Wait();
-
- registrar_.RemoveAll();
- observer_.reset();
-}
-
-void ExtensionTestNotificationObserver::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- switch (type) {
- case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
- last_loaded_extension_id_ =
- content::Details<const Extension>(details).ptr()->id();
- VLOG(1) << "Got EXTENSION_LOADED notification.";
- break;
-
- case extensions::NOTIFICATION_CRX_INSTALLER_DONE:
- VLOG(1) << "Got CRX_INSTALLER_DONE notification.";
- {
- const Extension* extension =
- content::Details<const Extension>(details).ptr();
- if (extension)
- last_loaded_extension_id_ = extension->id();
- else
- last_loaded_extension_id_.clear();
- }
- ++crx_installers_done_observed_;
- break;
-
- case extensions::NOTIFICATION_EXTENSION_LOAD_ERROR:
- VLOG(1) << "Got EXTENSION_LOAD_ERROR notification.";
- ++extension_load_errors_observed_;
- break;
-
- default:
- NOTREACHED();
- break;
- }
-}
-
-void ExtensionTestNotificationObserver::OnPageActionsUpdated(
+void ChromeExtensionTestNotificationObserver::OnPageActionsUpdated(
content::WebContents* web_contents) {
MaybeQuit();
}
-
-void ExtensionTestNotificationObserver::WaitForCondition(
- const ConditionCallback& condition,
- NotificationSet* notification_set) {
- if (condition.Run())
- return;
- condition_ = condition;
-
- scoped_refptr<content::MessageLoopRunner> runner(
- new content::MessageLoopRunner);
- quit_closure_ = runner->QuitClosure();
-
- std::unique_ptr<base::CallbackList<void()>::Subscription> subscription;
- if (notification_set) {
- subscription = notification_set->callback_list().Add(
- base::Bind(&ExtensionTestNotificationObserver::MaybeQuit,
- base::Unretained(this)));
- }
- runner->Run();
-
- condition_.Reset();
- quit_closure_.Reset();
-}
-
-void ExtensionTestNotificationObserver::MaybeQuit() {
- if (condition_.Run())
- quit_closure_.Run();
-}

Powered by Google App Engine
This is Rietveld 408576698