[go: nahoru, domu]

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: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515981}
diff --git a/components/translate/ios/browser/translate_controller.h b/components/translate/ios/browser/translate_controller.h
index ee1ded6..af2393e 100644
--- a/components/translate/ios/browser/translate_controller.h
+++ b/components/translate/ios/browser/translate_controller.h
@@ -92,6 +92,10 @@
   // 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_;
diff --git a/components/translate/ios/browser/translate_controller.mm b/components/translate/ios/browser/translate_controller.mm
index 4a728c1..567e1a69 100644
--- a/components/translate/ios/browser/translate_controller.mm
+++ b/components/translate/ios/browser/translate_controller.mm
@@ -26,19 +26,24 @@
 
 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 @@
 // 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