Commit 2f4a9b82 authored by Sylvain Defresne's avatar Sylvain Defresne Committed by Commit Bot

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

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

Bug: 775684
Change-Id: Ib3331edef26d31e0ccb48e65eed9fc4b5de84fa3
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/757106
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515962}
parent 23804a86
...@@ -74,6 +74,10 @@ class LanguageDetectionController : public web::WebStateObserver { ...@@ -74,6 +74,10 @@ class LanguageDetectionController : public web::WebStateObserver {
web::NavigationContext* navigation_context) override; web::NavigationContext* navigation_context) override;
void WebStateDestroyed(web::WebState* web_state) override; void WebStateDestroyed(web::WebState* web_state) override;
// The WebState this instance is observing. Will be null after
// WebStateDestroyed has been called.
web::WebState* web_state_ = nullptr;
JsLanguageDetectionManager* js_manager_; JsLanguageDetectionManager* js_manager_;
BooleanPrefMember translate_enabled_; BooleanPrefMember translate_enabled_;
std::string content_language_header_; std::string content_language_header_;
......
...@@ -40,27 +40,30 @@ LanguageDetectionController::LanguageDetectionController( ...@@ -40,27 +40,30 @@ LanguageDetectionController::LanguageDetectionController(
web::WebState* web_state, web::WebState* web_state,
JsLanguageDetectionManager* manager, JsLanguageDetectionManager* manager,
PrefService* prefs) PrefService* prefs)
: web::WebStateObserver(web_state), : web_state_(web_state), js_manager_(manager), weak_method_factory_(this) {
js_manager_(manager), DCHECK(web_state_);
weak_method_factory_(this) {
DCHECK(web::WebStateObserver::web_state());
DCHECK(js_manager_); DCHECK(js_manager_);
translate_enabled_.Init(prefs::kEnableTranslate, prefs); translate_enabled_.Init(prefs::kEnableTranslate, prefs);
web_state->AddScriptCommandCallback( web_state_->AddObserver(this);
web_state_->AddScriptCommandCallback(
base::Bind(&LanguageDetectionController::OnTextCaptured, base::Bind(&LanguageDetectionController::OnTextCaptured,
base::Unretained(this)), base::Unretained(this)),
kCommandPrefix); kCommandPrefix);
} }
LanguageDetectionController::~LanguageDetectionController() { LanguageDetectionController::~LanguageDetectionController() {
if (web_state_) {
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
} }
void LanguageDetectionController::StartLanguageDetection() { void LanguageDetectionController::StartLanguageDetection() {
if (!translate_enabled_.GetValue()) if (!translate_enabled_.GetValue())
return; // Translate disabled in preferences. return; // Translate disabled in preferences.
DCHECK(web_state()); DCHECK(web_state_);
const GURL& url = web_state()->GetVisibleURL(); const GURL& url = web_state_->GetVisibleURL();
if (!web::UrlHasWebScheme(url) || !web_state()->ContentIsHTML()) if (!web::UrlHasWebScheme(url) || !web_state_->ContentIsHTML())
return; return;
[js_manager_ inject]; [js_manager_ inject];
[js_manager_ startLanguageDetection]; [js_manager_ startLanguageDetection];
...@@ -135,7 +138,7 @@ void LanguageDetectionController::OnTextRetrieved( ...@@ -135,7 +138,7 @@ void LanguageDetectionController::OnTextRetrieved(
details.html_root_language = html_lang; details.html_root_language = html_lang;
details.adopted_language = language; details.adopted_language = language;
language::IOSLanguageDetectionTabHelper::FromWebState(web_state()) language::IOSLanguageDetectionTabHelper::FromWebState(web_state_)
->OnLanguageDetermined(details); ->OnLanguageDetermined(details);
} }
...@@ -158,6 +161,7 @@ void LanguageDetectionController::ExtractContentLanguageHeader( ...@@ -158,6 +161,7 @@ void LanguageDetectionController::ExtractContentLanguageHeader(
void LanguageDetectionController::PageLoaded( void LanguageDetectionController::PageLoaded(
web::WebState* web_state, web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) { web::PageLoadCompletionStatus load_completion_status) {
DCHECK_EQ(web_state_, web_state);
if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS) if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS)
StartLanguageDetection(); StartLanguageDetection();
} }
...@@ -165,6 +169,7 @@ void LanguageDetectionController::PageLoaded( ...@@ -165,6 +169,7 @@ void LanguageDetectionController::PageLoaded(
void LanguageDetectionController::DidFinishNavigation( void LanguageDetectionController::DidFinishNavigation(
web::WebState* web_state, web::WebState* web_state,
web::NavigationContext* navigation_context) { web::NavigationContext* navigation_context) {
DCHECK_EQ(web_state_, web_state);
if (navigation_context->IsSameDocument()) { if (navigation_context->IsSameDocument()) {
StartLanguageDetection(); StartLanguageDetection();
} else { } else {
...@@ -173,7 +178,10 @@ void LanguageDetectionController::DidFinishNavigation( ...@@ -173,7 +178,10 @@ void LanguageDetectionController::DidFinishNavigation(
} }
void LanguageDetectionController::WebStateDestroyed(web::WebState* web_state) { void LanguageDetectionController::WebStateDestroyed(web::WebState* web_state) {
web_state->RemoveScriptCommandCallback(kCommandPrefix); DCHECK_EQ(web_state_, web_state);
web_state_->RemoveScriptCommandCallback(kCommandPrefix);
web_state_->RemoveObserver(this);
web_state_ = nullptr;
} }
} // namespace translate } // namespace translate
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