Commit 4051ebd1 authored by Sylvain Defresne's avatar Sylvain Defresne Committed by Commit Bot

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

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

Bug: 775684
Change-Id: I62146d7085ab3e230c71cab0510a1ed86aa6a162
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet
Reviewed-on: https://chromium-review.googlesource.com/757109
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515981}
parent df204d27
......@@ -92,6 +92,10 @@ class TranslateController : public web::WebStateObserver {
// web::WebStateObserver implementation:
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;
Observer* observer_;
base::scoped_nsobject<JsTranslateManager> js_manager_;
base::WeakPtrFactory<TranslateController> weak_method_factory_;
......
......@@ -26,19 +26,24 @@ const char kCommandPrefix[] = "translate";
TranslateController::TranslateController(web::WebState* web_state,
JsTranslateManager* manager)
: web::WebStateObserver(web_state),
: web_state_(web_state),
observer_(nullptr),
js_manager_(manager),
weak_method_factory_(this) {
DCHECK(js_manager_);
DCHECK(web::WebStateObserver::web_state());
web_state->AddScriptCommandCallback(
DCHECK(web_state_);
web_state_->AddObserver(this);
web_state_->AddScriptCommandCallback(
base::Bind(&TranslateController::OnJavascriptCommandReceived,
base::Unretained(this)),
kCommandPrefix);
}
TranslateController::~TranslateController() {
if (web_state_) {
web_state_->RemoveObserver(this);
web_state_ = nullptr;
}
}
void TranslateController::InjectTranslateScript(
......@@ -143,7 +148,10 @@ bool TranslateController::OnTranslateComplete(
// web::WebStateObserver implementation.
void TranslateController::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