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 17% |
| 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..761fea49e60ddcfa2ddbcd24b334f430961818ef 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,91 @@ |
| -// 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 ExclusiveAccessManager; |
| 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 { |
| +// The base class for the different exclusive access controller like the |
| +// FullscreenController, and MouseLockController which controls lifetime for |
| +// which the resource (screen/mouse) is held exclusively. |
| +class ExclusiveAccessControllerBase : public content::NotificationObserver { |
| public: |
| - NotificationServiceSessionsRouter( |
| - Profile* profile, |
| - const syncer::SyncableService::StartSyncFlare& flare); |
| - ~NotificationServiceSessionsRouter() override; |
| + explicit ExclusiveAccessControllerBase(ExclusiveAccessManager* manager, |
| + Browser* browser); |
| + ~ExclusiveAccessControllerBase() override; |
| + |
| + GURL GetExclusiveAccessBubbleURL() const; |
| + virtual GURL GetURLForExclusiveAccessBubble() const; |
| + content::WebContents* GetExclusiveAccessTab() const; |
| + |
| + // Functions implemented by derived classes: |
| + |
| + // Control behavior when escape is pressed. |
|
miu
2015/01/16 22:17:38
Add to comment, something like: Returns true if an
Sriram
2015/01/21 01:38:56
Done.
|
| + 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); |
|
miu
2015/01/16 22:17:38
style: These three should be:
void Foo(...) ove
Sriram
2015/01/21 01:38:56
They are not callbacks but actual function calls.
miu
2015/01/22 00:47:15
OIC, these are not overriding a virtual method fro
|
| + virtual void OnTabDetachedFromView(content::WebContents* web_contents); |
| + virtual void OnTabClosing(content::WebContents* web_contents); |
| + |
| + // content::NotificationObserver to detect page navigation and exit exclusive |
| + // access. |
| 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); |
| + ExclusiveAccessManager* GetManager() const; |
| + Browser* GetBrowser() const; |
|
miu
2015/01/16 22:17:38
IMO, you should inline these getters since they ju
Sriram
2015/01/21 01:38:57
Done.
|
| + 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); |
| + // Make the current tab exit exclusive access mode if it is in it. |
| + virtual void ExitExclusiveAccessIfNecessary() = 0; |
| - // Called when the urls of favicon changed. |
| - void OnFaviconChanged(const std::set<GURL>& changed_favicons); |
| + // Notifies the tab that it has been forced out of exclusive access mode |
| + // if necessary. |
| + virtual void NotifyTabOfExclusiveAccessChange() = 0; |
| - LocalSessionEventHandler* handler_; |
| - content::NotificationRegistrar registrar_; |
| + private: |
| + void UpdateNotificationRegistrations(); |
| + |
| + ExclusiveAccessManager* manager_; |
|
miu
2015/01/16 22:17:38
This can be const too.
Sriram
2015/01/21 01:38:56
Done.
|
| + Browser* const browser_; |
| + BrowserWindow* const window_; |
|
miu
2015/01/16 22:17:38
Is the window_ member necessary? Code can always
Sriram
2015/01/21 01:38:56
Done.
|
| 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_ |