Commit b1fa07f8 authored by Gang Wu's avatar Gang Wu Committed by Commit Bot

Add Observer to TabAndroid

Bug: 1138729
Change-Id: I5c9b3cbf04e5bfebcc71d4ef1248da179f0ef8ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2481058
Commit-Queue: Gang Wu <gangwu@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#818967}
parent 4ba6e587
......@@ -231,6 +231,14 @@ bool TabAndroid::IsHidden() {
return Java_TabImpl_isHidden(env, weak_java_tab_.get(env));
}
void TabAndroid::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void TabAndroid::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void TabAndroid::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
delete this;
}
......@@ -274,6 +282,9 @@ void TabAndroid::InitWebContents(
// Shows a warning notification for dangerous flags in about:flags.
chrome::ShowBadFlagsPrompt(web_contents());
for (Observer& observer : observers_)
observer.OnInitWebContents(this);
}
void TabAndroid::UpdateDelegates(
......
......@@ -14,6 +14,7 @@
#include "base/android/scoped_java_ref.h"
#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/observer_list.h"
#include "base/strings/string16.h"
#include "base/supports_user_data.h"
#include "chrome/browser/sync/glue/synced_tab_delegate_android.h"
......@@ -49,6 +50,12 @@ class TabAndroid : public base::SupportsUserData {
FULL_PRERENDERED_PAGE_LOAD = 3,
};
class Observer : public base::CheckedObserver {
public:
// Called when WebContents is initialized.
virtual void OnInitWebContents(TabAndroid* tab) = 0;
};
// Convenience method to retrieve the Tab associated with the passed
// WebContents. Can return NULL.
static TabAndroid* FromWebContents(const content::WebContents* web_contents);
......@@ -107,6 +114,12 @@ class TabAndroid : public base::SupportsUserData {
bool IsCustomTab();
bool IsHidden();
// Observers -----------------------------------------------------------------
// Adds/Removes an Observer.
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Methods called from Java via JNI -----------------------------------------
void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
......@@ -179,6 +192,8 @@ class TabAndroid : public base::SupportsUserData {
scoped_refptr<content::DevToolsAgentHost> devtools_host_;
std::unique_ptr<browser_sync::SyncedTabDelegateAndroid> synced_tab_delegate_;
base::ObserverList<Observer> observers_;
DISALLOW_COPY_AND_ASSIGN(TabAndroid);
};
......
......@@ -72,9 +72,12 @@ namespace {
#if defined(OS_ANDROID)
class AutocompleteClientTabAndroidUserData
: public TabAndroidUserData<AutocompleteClientTabAndroidUserData> {
: public TabAndroidUserData<AutocompleteClientTabAndroidUserData>,
public TabAndroid::Observer {
public:
~AutocompleteClientTabAndroidUserData() override = default;
~AutocompleteClientTabAndroidUserData() override {
tab_->RemoveObserver(this);
}
const GURL& GetStrippedURL() { return stripped_url_; }
......@@ -89,10 +92,19 @@ class AutocompleteClientTabAndroidUserData
}
}
// TabAndroid::Observer implementation
void OnInitWebContents(TabAndroid* tab) override {
tab->RemoveUserData(UserDataKey());
}
private:
explicit AutocompleteClientTabAndroidUserData(TabAndroid* tab) {}
explicit AutocompleteClientTabAndroidUserData(TabAndroid* tab) : tab_(tab) {
DCHECK(tab);
tab->AddObserver(this);
}
friend class TabAndroidUserData<AutocompleteClientTabAndroidUserData>;
TabAndroid* tab_;
bool initialized_ = false;
GURL stripped_url_;
......@@ -505,8 +517,6 @@ TabAndroid* ChromeAutocompleteProviderClient::GetTabOpenWithURL(
} else {
// Browser did not load the tab yet after Chrome started. To avoid
// reloading WebContents, we just compare URLs.
// TODO(crbug.com/1138729): Delete user data after WebContents is
// initialized.
AutocompleteClientTabAndroidUserData::CreateForTabAndroid(tab);
AutocompleteClientTabAndroidUserData* user_data =
AutocompleteClientTabAndroidUserData::FromTabAndroid(tab);
......
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