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