Chromium Code Reviews| Index: chrome/browser/ui/exclusive_access/exclusive_access_controller_base.h |
| diff --git a/chrome/browser/sync/sessions/notification_service_sessions_router.h b/chrome/browser/ui/exclusive_access/exclusive_access_controller_base.h |
| similarity index 18% |
| copy from chrome/browser/sync/sessions/notification_service_sessions_router.h |
| copy to chrome/browser/ui/exclusive_access/exclusive_access_controller_base.h |
| index f1249f19c2b5af626dc32a9e457d7ecb40f55aec..59a9765d5cc16300d8fc4245f9d95c13e86c47b5 100644 |
| --- a/chrome/browser/sync/sessions/notification_service_sessions_router.h |
| +++ b/chrome/browser/ui/exclusive_access/exclusive_access_controller_base.h |
| @@ -1,73 +1,93 @@ |
| -// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// 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. |
| -#ifndef CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_ |
| -#define CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_ |
| +#ifndef CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTROLLER_BASE_H_ |
| +#define CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTROLLER_BASE_H_ |
| -#include <set> |
| - |
| -#include "base/callback_list.h" |
| +#include "base/basictypes.h" |
| #include "base/memory/weak_ptr.h" |
| -#include "chrome/browser/sync/sessions/sessions_sync_manager.h" |
| +#include "chrome/browser/ui/exclusive_access/exclusive_access_bubble_type.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| +class Browser; |
| +class BrowserWindow; |
| +class ExclusiveAccessControllerManager; |
| class GURL; |
| -class HistoryService; |
| class Profile; |
| namespace content { |
| class WebContents; |
| } |
| -namespace browser_sync { |
| - |
| -// A SessionsSyncManager::LocalEventRouter that drives session sync via |
| -// the NotificationService. |
| -class NotificationServiceSessionsRouter |
| - : public LocalSessionEventRouter, |
| - public content::NotificationObserver { |
| +// Base class for different exclusive_access controller class that implements |
|
scheib
2015/01/14 22:37:59
Later readers will be fairly confused by what "Exc
Sriram
2015/01/15 00:34:28
Done.
|
| +// common behaviours. |
| +class ExclusiveAccessControllerBase : public content::NotificationObserver { |
| public: |
| - NotificationServiceSessionsRouter( |
| - Profile* profile, |
| - const syncer::SyncableService::StartSyncFlare& flare); |
| - ~NotificationServiceSessionsRouter() override; |
| + explicit ExclusiveAccessControllerBase( |
| + ExclusiveAccessControllerManager* manager, |
| + Browser* browser); |
| + ~ExclusiveAccessControllerBase() override; |
| + |
| + GURL GetExclusiveAccessBubbleURL() const; |
| + virtual GURL GetURLForExclusiveAccessBubble() const; |
| + content::WebContents* GetExclusiveAccessTab() const; |
| + |
| + // Functions implemented by derived class: |
| + |
| + // Control behavior when escape is pressed. |
| + virtual bool HandleUserPressedEscape() = 0; |
| + |
| + // Called by Browser in response to call from ExclusiveAccessBubble. |
| + virtual void ExitExclusiveAccessToPreviousState() = 0; |
| + |
| + // Return true if bubble content should be updated. |
| + virtual bool OnAcceptExclusiveAccessPermission() = 0; |
| + |
| + // Return true if bubble content should be updated. |
| + virtual bool OnDenyExclusiveAccessPermission() = 0; |
| - // content::NotificationObserver implementation. |
| - // BrowserSessionProvider -> sync API model change application. |
| + // Callbacks //////////////////////////////////////////////////////////////// |
| + virtual void OnTabDeactivated(content::WebContents* web_contents); |
| + virtual void OnTabDetachedFromView(content::WebContents* web_contents); |
| + virtual void OnTabClosing(content::WebContents* web_contents); |
| + |
| + // content::NotificationObserver: |
|
scheib
2015/01/14 22:37:59
Might as well explain why:
content:NotificationObs
Sriram
2015/01/15 00:34:28
Done.
|
| void Observe(int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) override; |
| - // SessionsSyncManager::LocalEventRouter implementation. |
| - void StartRoutingTo(LocalSessionEventHandler* handler) override; |
| - void Stop() override; |
| + protected: |
| + void SetTabWithExclusiveAccess(content::WebContents* tab); |
| + ExclusiveAccessControllerManager* GetManager() const; |
| + Browser* GetBrowser() const; |
| + Profile* GetProfile() const; |
| + BrowserWindow* GetWindow() const; |
| - private: |
| - // Called when the URL visited in |web_contents| was blocked by the |
| - // SupervisedUserService. We forward this on to our handler_ via the |
| - // normal OnLocalTabModified, but pass through here via a WeakPtr |
| - // callback from SupervisedUserService and to extract the tab delegate |
| - // from WebContents. |
| - void OnNavigationBlocked(content::WebContents* web_contents); |
| + void UpdateExclusiveAccessExitBubbleContent(); |
| + ExclusiveAccessBubbleType GetExclusiveAccessExitBubbleType(); |
| - // Called when the urls of favicon changed. |
| - void OnFaviconChanged(const std::set<GURL>& changed_favicons); |
| + // Make the current tab exit exclusive access mode if it is in it. |
| + virtual void ExitExclusiveAccessIfNecessary() = 0; |
| - LocalSessionEventHandler* handler_; |
| - content::NotificationRegistrar registrar_; |
| + // Notifies the tab that it has been forced out of exclusive access mode |
| + // if necessary. |
| + virtual void NotifyTabOfExclusiveAccessChange() = 0; |
| + |
| + private: |
| + void UpdateNotificationRegistrations(); |
| + |
| + ExclusiveAccessControllerManager* manager_; |
| + Browser* const browser_; |
| + BrowserWindow* const window_; |
| Profile* const profile_; |
| - syncer::SyncableService::StartSyncFlare flare_; |
| - scoped_ptr<base::CallbackList<void(const std::set<GURL>&)>::Subscription> |
| - favicon_changed_subscription_; |
| + content::NotificationRegistrar registrar_; |
| - base::WeakPtrFactory<NotificationServiceSessionsRouter> weak_ptr_factory_; |
| + content::WebContents* tab_with_exclusive_access_; |
| - DISALLOW_COPY_AND_ASSIGN(NotificationServiceSessionsRouter); |
| + DISALLOW_COPY_AND_ASSIGN(ExclusiveAccessControllerBase); |
| }; |
| -} // namespace browser_sync |
| - |
| -#endif // CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_ |
| +#endif // CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTROLLER_BASE_H_ |