| 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
|
|
|