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

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

Issue 1168383002: Implement sidebar support for extension action popups Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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/sidebar_manager.cc
diff --git a/chrome/browser/extensions/sidebar_manager.cc b/chrome/browser/extensions/sidebar_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..483c5e678ed1d3f20bc1d167933c616f1878f82b
--- /dev/null
+++ b/chrome/browser/extensions/sidebar_manager.cc
@@ -0,0 +1,96 @@
+// Copyright (c) 2015 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/sidebar_manager.h"
+
+#include <vector>
+
+#include "base/command_line.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/sidebar_container.h"
+#include "chrome/browser/extensions/sidebar_manager_observer.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/web_contents.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/common/switches.h"
+#include "url/gurl.h"
+
+using content::BrowserContext;
Devlin 2015/06/19 19:56:09 use "using" like this sparingly (a good rule of th
ltilve 2015/06/28 22:44:20 Done.
+using content::WebContents;
+
+namespace extensions {
Devlin 2015/06/19 19:56:09 \n
ltilve 2015/06/28 22:44:20 Done.
+// static
+SidebarManager* SidebarManager::GetFromContext(BrowserContext* context) {
+ return ExtensionSystem::Get(context)->sidebar_manager();
+}
+
+SidebarManager::SidebarManager() {
+}
+
+SidebarContainer* SidebarManager::GetSidebarContainerFor(
+ content::WebContents* tab) {
+ TabToSidebarContainerMap::iterator it = tab_to_sidebar_container_.find(tab);
+ if (it == tab_to_sidebar_container_.end())
Devlin 2015/06/19 19:56:09 return it == tab_to_sidebar_container_.end() ? nul
ltilve 2015/06/28 22:44:20 Done.
+ return nullptr;
+ return it->second;
+}
+
+void SidebarManager::CreateSidebar(content::WebContents* tab,
+ const GURL& url,
+ Browser* browser) {
+ SidebarContainer* container = GetSidebarContainerFor(tab);
+ if (container)
+ HideSidebar(tab);
+
+ container = new SidebarContainer(browser, tab, url);
+ tab_to_sidebar_container_[tab] = container;
+
+ const std::string id = container->extension_id();
+ FOR_EACH_OBSERVER(SidebarManagerObserver, observer_list_,
+ OnSidebarShown(tab, id));
+}
+
+void SidebarManager::HideSidebar(WebContents* tab) {
+ SidebarContainer* container = GetSidebarContainerFor(tab);
+ if (!container)
+ return;
+
+ const std::string content_id = container->extension_id();
+ tab_to_sidebar_container_.erase(tab);
+ delete container;
+
+ FOR_EACH_OBSERVER(SidebarManagerObserver, observer_list_,
+ OnSidebarHidden(tab, content_id));
+}
+
+bool SidebarManager::HasSidebar(WebContents* tab) {
+ return GetSidebarContainerFor(tab) != nullptr;
+}
+
+SidebarManager::~SidebarManager() {
+ DCHECK(tab_to_sidebar_container_.empty());
+}
+
+SidebarContainer* SidebarManager::FindSidebarContainerFor(
+ content::WebContents* sidebar_contents) {
+ for (TabToSidebarContainerMap::iterator it =
+ tab_to_sidebar_container_.begin();
+ it != tab_to_sidebar_container_.end(); ++it) {
+ if (sidebar_contents == it->second->host_contents())
+ return it->second;
+ }
+ return nullptr;
+}
+
+void SidebarManager::AddObserver(SidebarManagerObserver* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void SidebarManager::RemoveObserver(SidebarManagerObserver* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698