Commit a6a93bba authored by Sean Topping's avatar Sean Topping Committed by Commit Bot

[Chromecast] Add CastWebView::Observer

Adds an observer interface for CastWebView. This allows multiple
components to track the CastWebView lifecycle (similar to
WebContentsObserver APIs).

Bug: None
Test: cast_shell
Change-Id: I37f45b896c1696c9fe91d9706cbddf0b2e46d2cc
Reviewed-on: https://chromium-review.googlesource.com/961588Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Commit-Queue: Sean Topping <seantopping@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543179}
parent 03910003
......@@ -46,6 +46,7 @@ cast_source_set("browser") {
"cast_resource_dispatcher_host_delegate.h",
"cast_web_contents_manager.cc",
"cast_web_contents_manager.h",
"cast_web_view.cc",
"cast_web_view.h",
"cast_web_view_default.cc",
"cast_web_view_default.h",
......
// Copyright 2018 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.
#include "chromecast/browser/cast_web_view.h"
namespace chromecast {
CastWebView::CastWebView() {}
CastWebView::~CastWebView() {
for (Observer& observer : observer_list_) {
observer.OnPageDestroyed(this);
}
}
void CastWebView::AddObserver(CastWebView::Observer* observer) {
observer_list_.AddObserver(observer);
}
void CastWebView::RemoveObserver(CastWebView::Observer* observer) {
observer_list_.RemoveObserver(observer);
}
} // namespace chromecast
......@@ -8,6 +8,8 @@
#include <cstdint>
#include <string>
#include "base/macros.h"
#include "base/observer_list.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "chromecast/browser/cast_content_window.h"
......@@ -42,6 +44,17 @@ class CastWebView {
const base::string16& source_id) = 0;
};
// Observer interface for tracking CastWebView lifetime.
class Observer {
public:
// Notifies that |web_view| is being destroyed. |web_view| should be assumed
// invalid after this method returns.
virtual void OnPageDestroyed(CastWebView* web_view) {}
protected:
virtual ~Observer() {}
};
// The parameters used to create a CastWebView instance. Passed to
// CastWebContentsManager::CreateWebView().
struct CreateParams {
......@@ -69,7 +82,8 @@ class CastWebView {
bool enabled_for_dev = false;
};
virtual ~CastWebView() {}
CastWebView();
virtual ~CastWebView();
virtual shell::CastContentWindow* window() const = 0;
......@@ -89,6 +103,15 @@ class CastWebView {
// |is_visible| is true.
virtual void CreateWindow(CastWindowManager* window_manager,
bool is_visible) = 0;
// Observer interface:
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
private:
base::ObserverList<Observer> observer_list_;
DISALLOW_COPY_AND_ASSIGN(CastWebView);
};
} // namespace chromecast
......
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