Browse Source

fix: segfault in SerialChooserController (#25969)

* fix: segfault in SerialChooserController

* Remove temporary testing
John Kleinschmidt 4 years ago
parent
commit
87d3f3584c

+ 3 - 5
shell/browser/serial/serial_chooser_controller.cc

@@ -77,11 +77,13 @@ SerialChooserController::SerialChooserController(
   DCHECK(chooser_context_);
   chooser_context_->GetPortManager()->GetDevices(base::BindOnce(
       &SerialChooserController::OnGetDevices, weak_factory_.GetWeakPtr()));
-  observer_.Add(chooser_context_.get());
 }
 
 SerialChooserController::~SerialChooserController() {
   RunCallback(/*port=*/nullptr);
+  if (chooser_context_) {
+    chooser_context_->RemovePortObserver(this);
+  }
 }
 
 api::Session* SerialChooserController::GetSession() {
@@ -114,10 +116,6 @@ void SerialChooserController::OnPortRemoved(
   }
 }
 
-void SerialChooserController::OnPortManagerConnectionError() {
-  observer_.RemoveAll();
-}
-
 void SerialChooserController::OnDeviceChosen(const std::string& port_id) {
   if (port_id.empty()) {
     RunCallback(/*port=*/nullptr);

+ 1 - 7
shell/browser/serial/serial_chooser_controller.h

@@ -10,7 +10,6 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
 #include "base/strings/string16.h"
 #include "content/public/browser/serial_chooser.h"
 #include "content/public/browser/web_contents.h"
@@ -44,7 +43,7 @@ class SerialChooserController final : public SerialChooserContext::PortObserver,
   // SerialChooserContext::PortObserver:
   void OnPortAdded(const device::mojom::SerialPortInfo& port) override;
   void OnPortRemoved(const device::mojom::SerialPortInfo& port) override;
-  void OnPortManagerConnectionError() override;
+  void OnPortManagerConnectionError() override {}
 
  private:
   api::Session* GetSession();
@@ -59,11 +58,6 @@ class SerialChooserController final : public SerialChooserContext::PortObserver,
   url::Origin embedding_origin_;
 
   base::WeakPtr<SerialChooserContext> chooser_context_;
-  ScopedObserver<SerialChooserContext,
-                 SerialChooserContext::PortObserver,
-                 &SerialChooserContext::AddPortObserver,
-                 &SerialChooserContext::RemovePortObserver>
-      observer_{this};
 
   std::vector<device::mojom::SerialPortInfoPtr> ports_;