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