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,
void NavigationItemCommitted(
web::WebState* web_state,
const web::LoadCommittedDetails& load_details) override;
void WebStateDestroyed(web::WebState* web_state) override;
// TranslateDriver methods.
void OnIsPageTranslatedChanged() override;
......@@ -100,6 +101,10 @@ class IOSTranslateDriver : public TranslateDriver,
const std::string& original_language,
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.
web::NavigationManager* navigation_manager_;
......
......@@ -51,7 +51,7 @@ IOSTranslateDriver::IOSTranslateDriver(
web::WebState* web_state,
web::NavigationManager* navigation_manager,
TranslateManager* translate_manager)
: web::WebStateObserver(web_state),
: web_state_(web_state),
navigation_manager_(navigation_manager),
translate_manager_(translate_manager->GetWeakPtr()),
page_seq_no_(0),
......@@ -59,7 +59,9 @@ IOSTranslateDriver::IOSTranslateDriver(
weak_method_factory_(this) {
DCHECK(navigation_manager_);
DCHECK(translate_manager_);
DCHECK(web::WebStateObserver::web_state());
DCHECK(web_state_);
web_state_->AddObserver(this);
CRWJSInjectionReceiver* receiver = web_state->GetJSInjectionReceiver();
DCHECK(receiver);
......@@ -81,6 +83,10 @@ IOSTranslateDriver::IOSTranslateDriver(
}
IOSTranslateDriver::~IOSTranslateDriver() {
if (web_state_) {
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
}
language::IOSLanguageDetectionTabHelper::Callback
......@@ -98,7 +104,7 @@ void IOSTranslateDriver::OnLanguageDetermined(
translate_manager_->translate_client()->RecordLanguageDetectionEvent(details);
if (web_state())
if (web_state_)
translate_manager_->InitiateTranslation(details.adopted_language);
}
......@@ -107,6 +113,8 @@ void IOSTranslateDriver::OnLanguageDetermined(
void IOSTranslateDriver::NavigationItemCommitted(
web::WebState* web_state,
const web::LoadCommittedDetails& load_details) {
DCHECK_EQ(web_state_, web_state);
// Interrupt pending translations and reset various data when a navigation
// happens. Desktop does it by tracking changes in the page ID, and
// through WebContentObserver, but these concepts do not exist on iOS.
......@@ -122,6 +130,12 @@ void IOSTranslateDriver::NavigationItemCommitted(
true, reload);
}
void IOSTranslateDriver::WebStateDestroyed(web::WebState* web_state) {
DCHECK_EQ(web_state_, web_state);
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
// TranslateDriver methods
bool IOSTranslateDriver::IsLinkNavigation() {
......@@ -160,15 +174,15 @@ bool IOSTranslateDriver::IsIncognito() {
}
const std::string& IOSTranslateDriver::GetContentsMimeType() {
return web_state()->GetContentsMimeType();
return web_state_->GetContentsMimeType();
}
const GURL& IOSTranslateDriver::GetLastCommittedURL() {
return web_state()->GetLastCommittedURL();
return web_state_->GetLastCommittedURL();
}
const GURL& IOSTranslateDriver::GetVisibleURL() {
return web_state()->GetVisibleURL();
return web_state_->GetVisibleURL();
}
bool IOSTranslateDriver::HasCurrentPage() {
......@@ -179,7 +193,7 @@ void IOSTranslateDriver::OpenUrlInNewTab(const GURL& url) {
web::WebState::OpenURLParams params(url, web::Referrer(),
WindowOpenDisposition::NEW_FOREGROUND_TAB,
ui::PAGE_TRANSITION_LINK, false);
web_state()->OpenURL(params);
web_state_->OpenURL(params);
}
void IOSTranslateDriver::TranslationDidSucceed(
......@@ -222,7 +236,7 @@ void IOSTranslateDriver::CheckTranslateStatus(
bool IOSTranslateDriver::IsPageValid(int page_seq_no) const {
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.
......
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