zoom_event_manager.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_
  5. #define COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_
  6. #include "base/callback_list.h"
  7. #include "base/memory/weak_ptr.h"
  8. #include "base/observer_list.h"
  9. #include "base/supports_user_data.h"
  10. #include "content/public/browser/host_zoom_map.h"
  11. namespace content {
  12. class BrowserContext;
  13. } // namespace content
  14. namespace zoom {
  15. class ZoomEventManagerObserver;
  16. // This class serves as a target for event notifications from all ZoomController
  17. // objects. Classes that need to know about browser-specific zoom events (e.g.
  18. // manual-mode zoom) should subscribe here.
  19. class ZoomEventManager : public base::SupportsUserData::Data {
  20. public:
  21. ZoomEventManager();
  22. ZoomEventManager(const ZoomEventManager&) = delete;
  23. ZoomEventManager& operator=(const ZoomEventManager&) = delete;
  24. ~ZoomEventManager() override;
  25. // Returns the ZoomEventManager for the specified BrowserContext. This
  26. // function creates the ZoomEventManager if it hasn't been created already.
  27. static ZoomEventManager* GetForBrowserContext(
  28. content::BrowserContext* context);
  29. // Called by ZoomControllers when changes are made to zoom levels in manual
  30. // mode in order that browser listeners can be notified.
  31. void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
  32. // Add and remove zoom level changed callbacks.
  33. // TODO(wjmaclean): Convert this callback mechanism to use
  34. // ZoomEventManagerObserver instead.
  35. base::CallbackListSubscription AddZoomLevelChangedCallback(
  36. content::HostZoomMap::ZoomLevelChangedCallback callback);
  37. // Called by ZoomLevelDelegates when changes are made to the default zoom
  38. // level for their associated HostZoomMap.
  39. void OnDefaultZoomLevelChanged();
  40. // Add and remove observers.
  41. void AddObserver(ZoomEventManagerObserver* observer);
  42. void RemoveObserver(ZoomEventManagerObserver* observer);
  43. // Get a weak ptr to be used by clients who may themselves be UserData for
  44. // the context, since the order of destruction is undefined between the client
  45. // and this class.
  46. base::WeakPtr<ZoomEventManager> GetWeakPtr() {
  47. return weak_ptr_factory_.GetWeakPtr();
  48. }
  49. private:
  50. base::RepeatingCallbackList<void(
  51. const content::HostZoomMap::ZoomLevelChange&)>
  52. zoom_level_changed_callbacks_;
  53. base::ObserverList<ZoomEventManagerObserver>::Unchecked observers_;
  54. base::WeakPtrFactory<ZoomEventManager> weak_ptr_factory_{this};
  55. };
  56. } // namespace zoom
  57. #endif // COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_