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 {
web::NavigationContext* navigation_context) 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_;
BooleanPrefMember translate_enabled_;
std::string content_language_header_;
......
......@@ -40,27 +40,30 @@ LanguageDetectionController::LanguageDetectionController(
web::WebState* web_state,
JsLanguageDetectionManager* manager,
PrefService* prefs)
: web::WebStateObserver(web_state),
js_manager_(manager),
weak_method_factory_(this) {
DCHECK(web::WebStateObserver::web_state());
: web_state_(web_state), js_manager_(manager), weak_method_factory_(this) {
DCHECK(web_state_);
DCHECK(js_manager_);
translate_enabled_.Init(prefs::kEnableTranslate, prefs);
web_state->AddScriptCommandCallback(
web_state_->AddObserver(this);
web_state_->AddScriptCommandCallback(
base::Bind(&LanguageDetectionController::OnTextCaptured,
base::Unretained(this)),
kCommandPrefix);
}
LanguageDetectionController::~LanguageDetectionController() {
if (web_state_) {
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
}
void LanguageDetectionController::StartLanguageDetection() {
if (!translate_enabled_.GetValue())
return; // Translate disabled in preferences.
DCHECK(web_state());
const GURL& url = web_state()->GetVisibleURL();
if (!web::UrlHasWebScheme(url) || !web_state()->ContentIsHTML())
DCHECK(web_state_);
const GURL& url = web_state_->GetVisibleURL();
if (!web::UrlHasWebScheme(url) || !web_state_->ContentIsHTML())
return;
[js_manager_ inject];
[js_manager_ startLanguageDetection];
......@@ -135,7 +138,7 @@ void LanguageDetectionController::OnTextRetrieved(
details.html_root_language = html_lang;
details.adopted_language = language;
language::IOSLanguageDetectionTabHelper::FromWebState(web_state())
language::IOSLanguageDetectionTabHelper::FromWebState(web_state_)
->OnLanguageDetermined(details);
}
......@@ -158,6 +161,7 @@ void LanguageDetectionController::ExtractContentLanguageHeader(
void LanguageDetectionController::PageLoaded(
web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) {
DCHECK_EQ(web_state_, web_state);
if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS)
StartLanguageDetection();
}
......@@ -165,6 +169,7 @@ void LanguageDetectionController::PageLoaded(
void LanguageDetectionController::DidFinishNavigation(
web::WebState* web_state,
web::NavigationContext* navigation_context) {
DCHECK_EQ(web_state_, web_state);
if (navigation_context->IsSameDocument()) {
StartLanguageDetection();
} else {
......@@ -173,7 +178,10 @@ void LanguageDetectionController::DidFinishNavigation(
}
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
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