blob: 16b34967e0894304a39fb02063d7704ffd6e3d36 [file] [log] [blame]
// Copyright 2014 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 COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_
#define COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_
#include <memory>
#include "base/callback_list.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/supports_user_data.h"
#include "content/public/browser/host_zoom_map.h"
namespace content {
class BrowserContext;
} // namespace content
namespace zoom {
class ZoomEventManagerObserver;
// This class serves as a target for event notifications from all ZoomController
// objects. Classes that need to know about browser-specific zoom events (e.g.
// manual-mode zoom) should subscribe here.
class ZoomEventManager : public base::SupportsUserData::Data {
public:
ZoomEventManager();
~ZoomEventManager() override;
// Returns the ZoomEventManager for the specified BrowserContext. This
// function creates the ZoomEventManager if it hasn't been created already.
static ZoomEventManager* GetForBrowserContext(
content::BrowserContext* context);
// Called by ZoomControllers when changes are made to zoom levels in manual
// mode in order that browser listeners can be notified.
void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
// Add and remove zoom level changed callbacks.
// TODO(wjmaclean): Convert this callback mechanism to use
// ZoomEventManagerObserver instead.
std::unique_ptr<content::HostZoomMap::Subscription>
AddZoomLevelChangedCallback(
const content::HostZoomMap::ZoomLevelChangedCallback& callback);
// Called by ZoomLevelDelegates when changes are made to the default zoom
// level for their associated HostZoomMap.
void OnDefaultZoomLevelChanged();
// Add and remove observers.
void AddObserver(ZoomEventManagerObserver* observer);
void RemoveObserver(ZoomEventManagerObserver* observer);
// Get a weak ptr to be used by clients who may themselves be UserData for
// the context, since the order of destruction is undefined between the client
// and this class.
base::WeakPtr<ZoomEventManager> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
private:
base::CallbackList<void(const content::HostZoomMap::ZoomLevelChange&)>
zoom_level_changed_callbacks_;
base::ObserverList<ZoomEventManagerObserver>::Unchecked observers_;
base::WeakPtrFactory<ZoomEventManager> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ZoomEventManager);
};
} // namespace zoom
#endif // COMPONENTS_ZOOM_ZOOM_EVENT_MANAGER_H_