Index: chrome/browser/chromeos/printing/usb_printer_detector.cc |
diff --git a/chrome/browser/chromeos/printing/usb_printer_detector.cc b/chrome/browser/chromeos/printing/usb_printer_detector.cc |
index 5ce8fb61feb8ad64b396f37dc3d4b8a2251c3c68..3be8d3013999d71ace21998c2de21d068c48ada8 100644 |
--- a/chrome/browser/chromeos/printing/usb_printer_detector.cc |
+++ b/chrome/browser/chromeos/printing/usb_printer_detector.cc |
@@ -107,6 +107,15 @@ class UsbPrinterDetectorImpl : public UsbPrinterDetector, |
return GetPrintersLocked(); |
} |
+ void Start() override { |
+ started_ = true; |
+ observer_list_->Notify(FROM_HERE, |
+ &PrinterDetector::Observer::OnPrintersFound, |
+ GetPrintersLocked()); |
+ observer_list_->Notify(FROM_HERE, |
+ &PrinterDetector::Observer::OnPrinterScanComplete); |
+ } |
+ |
private: |
std::vector<Printer> GetPrintersLocked() { |
pp_lock_.AssertAcquired(); |
@@ -143,13 +152,14 @@ class UsbPrinterDetectorImpl : public UsbPrinterDetector, |
base::AutoLock auto_lock(pp_lock_); |
if (base::ContainsKey(present_printers_, device->guid())) { |
present_printers_.erase(device->guid()); |
- auto printers = GetPrintersLocked(); |
- // We already have pp_lock_, so need to call the pre-locked version of |
- // GetPrinters to prevent deadlock. |
- observer_list_->Notify( |
- FROM_HERE, |
- &UsbPrinterDetector::Observer::OnAvailableUsbPrintersChanged, |
- GetPrintersLocked()); |
+ if (started_) { |
+ auto printers = GetPrintersLocked(); |
+ // We already have pp_lock_, so need to call the pre-locked version of |
+ // GetPrinters to prevent deadlock. |
+ observer_list_->Notify(FROM_HERE, |
+ &PrinterDetector::Observer::OnPrintersFound, |
+ GetPrintersLocked()); |
+ } |
} else { |
// If the device has been removed but it's not in present_printers_, it |
// must still be in the setup flow. |
@@ -274,12 +284,15 @@ class UsbPrinterDetectorImpl : public UsbPrinterDetector, |
} else { |
base::AutoLock auto_lock(pp_lock_); |
present_printers_.emplace(data->device->guid(), std::move(data->printer)); |
- observer_list_->Notify( |
- FROM_HERE, |
- &UsbPrinterDetector::Observer::OnAvailableUsbPrintersChanged, |
- GetPrintersLocked()); |
+ if (started_) { |
+ observer_list_->Notify(FROM_HERE, |
+ &PrinterDetector::Observer::OnPrintersFound, |
+ GetPrintersLocked()); |
+ } |
} |
} |
+ // Has Start() been called yet? |
+ bool started_ = false; |
// Map from USB GUID to Printer that we have detected as being currently |
// plugged in and have finished processing. Note present_printers_ may be |