Commit b6c3c2bc authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Convert FullscreenController to a Data.

This will allow it to be accessible to multiple parts of the UI via
a shared ChromeBrowserState.

Bug: 785663
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: Ia371a98681d27522443fbc0726fa4932e7666ae1
Reviewed-on: https://chromium-review.googlesource.com/802829
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarKurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521084}
parent d92cc042
......@@ -9,6 +9,7 @@
#include <memory>
#include "base/macros.h"
#include "base/supports_user_data.h"
@class ChromeBroadcaster;
@class ChromeBroadcastOberverBridge;
......@@ -20,10 +21,21 @@ class FullscreenWebStateListObserver;
// calculates how much of the toolbar should be visible as a result. When the
// user scrolls down the screen, the toolbar should be hidden to allow more of
// the page's content to be visible.
class FullscreenController {
class FullscreenController : public base::SupportsUserData::Data {
public:
explicit FullscreenController(ChromeBroadcaster* broadcaster);
~FullscreenController();
~FullscreenController() override;
// Creation and getter functions for FullscreenController.
// TODO(crbug.com/790886): Convert FullscreenController to a BrowserUserData.
static void CreateForUserData(base::SupportsUserData* user_data);
static FullscreenController* FromUserData(base::SupportsUserData* user_data);
// The ChromeBroadcaster through the FullscreenController receives UI
// information necessary to calculate fullscreen progress.
// TODO(crbug.com/790886): Once FullscreenController is a BrowserUserData,
// remove this ad-hoc broadcaster and drive the animations via the Browser's
// ChromeBroadcaster.
ChromeBroadcaster* broadcaster() { return broadcaster_; }
// Adds and removes FullscreenControllerObservers.
void AddObserver(FullscreenControllerObserver* observer);
......@@ -42,6 +54,9 @@ class FullscreenController {
void DecrementDisabledCounter();
private:
// Private contructor used by CreateForUserData().
explicit FullscreenController();
// The broadcaster that drives the model.
__strong ChromeBroadcaster* broadcaster_ = nil;
// The model used to calculate fullscreen state.
......
......@@ -14,8 +14,31 @@
#error "This file requires ARC support."
#endif
FullscreenController::FullscreenController(ChromeBroadcaster* broadcaster)
: broadcaster_(broadcaster),
namespace {
// The key under which FullscreenControllers are associated with their user
// data.
const void* const kFullscreenControllerKey = &kFullscreenControllerKey;
} // namespace
// static
void FullscreenController::CreateForUserData(
base::SupportsUserData* user_data) {
DCHECK(user_data);
if (!FullscreenController::FromUserData(user_data)) {
user_data->SetUserData(kFullscreenControllerKey,
base::WrapUnique(new FullscreenController()));
}
}
// static
FullscreenController* FullscreenController::FromUserData(
base::SupportsUserData* user_data) {
return static_cast<FullscreenController*>(
user_data->GetUserData(kFullscreenControllerKey));
}
FullscreenController::FullscreenController()
: broadcaster_([[ChromeBroadcaster alloc] init]),
model_(base::MakeUnique<FullscreenModel>()),
bridge_([[ChromeBroadcastOberverBridge alloc]
initWithObserver:model_.get()]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment