Commit f7077e32 authored by Sylvain Defresne's avatar Sylvain Defresne Committed by Commit Bot

Allow WebStateObserver to observe N WebStates [11/N].

Convert IOSTranslateDriver to directly track registration with
the observed WebState instead of relying on the deprecated
code in WebStateObserver.

Bug: 775684
Change-Id: Iad1d53fcab9448e088a19cd75767235f9816a0b3
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Reviewed-on: https://chromium-review.googlesource.com/757105
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515956}
parent 8535eae1
...@@ -53,6 +53,7 @@ class IOSTranslateDriver : public TranslateDriver, ...@@ -53,6 +53,7 @@ class IOSTranslateDriver : public TranslateDriver,
void NavigationItemCommitted( void NavigationItemCommitted(
web::WebState* web_state, web::WebState* web_state,
const web::LoadCommittedDetails& load_details) override; const web::LoadCommittedDetails& load_details) override;
void WebStateDestroyed(web::WebState* web_state) override;
// TranslateDriver methods. // TranslateDriver methods.
void OnIsPageTranslatedChanged() override; void OnIsPageTranslatedChanged() override;
...@@ -100,6 +101,10 @@ class IOSTranslateDriver : public TranslateDriver, ...@@ -100,6 +101,10 @@ class IOSTranslateDriver : public TranslateDriver,
const std::string& original_language, const std::string& original_language,
double translation_time) override; double translation_time) override;
// The WebState this instance is observing. Will be null after
// WebStateDestroyed has been called.
web::WebState* web_state_ = nullptr;
// The navigation manager of the tab we are associated with. // The navigation manager of the tab we are associated with.
web::NavigationManager* navigation_manager_; web::NavigationManager* navigation_manager_;
......
...@@ -51,7 +51,7 @@ IOSTranslateDriver::IOSTranslateDriver( ...@@ -51,7 +51,7 @@ IOSTranslateDriver::IOSTranslateDriver(
web::WebState* web_state, web::WebState* web_state,
web::NavigationManager* navigation_manager, web::NavigationManager* navigation_manager,
TranslateManager* translate_manager) TranslateManager* translate_manager)
: web::WebStateObserver(web_state), : web_state_(web_state),
navigation_manager_(navigation_manager), navigation_manager_(navigation_manager),
translate_manager_(translate_manager->GetWeakPtr()), translate_manager_(translate_manager->GetWeakPtr()),
page_seq_no_(0), page_seq_no_(0),
...@@ -59,7 +59,9 @@ IOSTranslateDriver::IOSTranslateDriver( ...@@ -59,7 +59,9 @@ IOSTranslateDriver::IOSTranslateDriver(
weak_method_factory_(this) { weak_method_factory_(this) {
DCHECK(navigation_manager_); DCHECK(navigation_manager_);
DCHECK(translate_manager_); DCHECK(translate_manager_);
DCHECK(web::WebStateObserver::web_state()); DCHECK(web_state_);
web_state_->AddObserver(this);
CRWJSInjectionReceiver* receiver = web_state->GetJSInjectionReceiver(); CRWJSInjectionReceiver* receiver = web_state->GetJSInjectionReceiver();
DCHECK(receiver); DCHECK(receiver);
...@@ -81,6 +83,10 @@ IOSTranslateDriver::IOSTranslateDriver( ...@@ -81,6 +83,10 @@ IOSTranslateDriver::IOSTranslateDriver(
} }
IOSTranslateDriver::~IOSTranslateDriver() { IOSTranslateDriver::~IOSTranslateDriver() {
if (web_state_) {
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
} }
language::IOSLanguageDetectionTabHelper::Callback language::IOSLanguageDetectionTabHelper::Callback
...@@ -98,7 +104,7 @@ void IOSTranslateDriver::OnLanguageDetermined( ...@@ -98,7 +104,7 @@ void IOSTranslateDriver::OnLanguageDetermined(
translate_manager_->translate_client()->RecordLanguageDetectionEvent(details); translate_manager_->translate_client()->RecordLanguageDetectionEvent(details);
if (web_state()) if (web_state_)
translate_manager_->InitiateTranslation(details.adopted_language); translate_manager_->InitiateTranslation(details.adopted_language);
} }
...@@ -107,6 +113,8 @@ void IOSTranslateDriver::OnLanguageDetermined( ...@@ -107,6 +113,8 @@ void IOSTranslateDriver::OnLanguageDetermined(
void IOSTranslateDriver::NavigationItemCommitted( void IOSTranslateDriver::NavigationItemCommitted(
web::WebState* web_state, web::WebState* web_state,
const web::LoadCommittedDetails& load_details) { const web::LoadCommittedDetails& load_details) {
DCHECK_EQ(web_state_, web_state);
// Interrupt pending translations and reset various data when a navigation // Interrupt pending translations and reset various data when a navigation
// happens. Desktop does it by tracking changes in the page ID, and // happens. Desktop does it by tracking changes in the page ID, and
// through WebContentObserver, but these concepts do not exist on iOS. // through WebContentObserver, but these concepts do not exist on iOS.
...@@ -122,6 +130,12 @@ void IOSTranslateDriver::NavigationItemCommitted( ...@@ -122,6 +130,12 @@ void IOSTranslateDriver::NavigationItemCommitted(
true, reload); true, reload);
} }
void IOSTranslateDriver::WebStateDestroyed(web::WebState* web_state) {
DCHECK_EQ(web_state_, web_state);
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
// TranslateDriver methods // TranslateDriver methods
bool IOSTranslateDriver::IsLinkNavigation() { bool IOSTranslateDriver::IsLinkNavigation() {
...@@ -160,15 +174,15 @@ bool IOSTranslateDriver::IsIncognito() { ...@@ -160,15 +174,15 @@ bool IOSTranslateDriver::IsIncognito() {
} }
const std::string& IOSTranslateDriver::GetContentsMimeType() { const std::string& IOSTranslateDriver::GetContentsMimeType() {
return web_state()->GetContentsMimeType(); return web_state_->GetContentsMimeType();
} }
const GURL& IOSTranslateDriver::GetLastCommittedURL() { const GURL& IOSTranslateDriver::GetLastCommittedURL() {
return web_state()->GetLastCommittedURL(); return web_state_->GetLastCommittedURL();
} }
const GURL& IOSTranslateDriver::GetVisibleURL() { const GURL& IOSTranslateDriver::GetVisibleURL() {
return web_state()->GetVisibleURL(); return web_state_->GetVisibleURL();
} }
bool IOSTranslateDriver::HasCurrentPage() { bool IOSTranslateDriver::HasCurrentPage() {
...@@ -179,7 +193,7 @@ void IOSTranslateDriver::OpenUrlInNewTab(const GURL& url) { ...@@ -179,7 +193,7 @@ void IOSTranslateDriver::OpenUrlInNewTab(const GURL& url) {
web::WebState::OpenURLParams params(url, web::Referrer(), web::WebState::OpenURLParams params(url, web::Referrer(),
WindowOpenDisposition::NEW_FOREGROUND_TAB, WindowOpenDisposition::NEW_FOREGROUND_TAB,
ui::PAGE_TRANSITION_LINK, false); ui::PAGE_TRANSITION_LINK, false);
web_state()->OpenURL(params); web_state_->OpenURL(params);
} }
void IOSTranslateDriver::TranslationDidSucceed( void IOSTranslateDriver::TranslationDidSucceed(
...@@ -222,7 +236,7 @@ void IOSTranslateDriver::CheckTranslateStatus( ...@@ -222,7 +236,7 @@ void IOSTranslateDriver::CheckTranslateStatus(
bool IOSTranslateDriver::IsPageValid(int page_seq_no) const { bool IOSTranslateDriver::IsPageValid(int page_seq_no) const {
bool user_navigated_away = page_seq_no != page_seq_no_; bool user_navigated_away = page_seq_no != page_seq_no_;
return !user_navigated_away && web_state(); return !user_navigated_away && web_state_;
} }
// TranslateController::Observer implementation. // TranslateController::Observer implementation.
......
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