| Index: chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| index f872501281d31e22a4bd6d4ae01c39a4c35a97d7..861a87695c3b0b4383aaefd7b7cfa7341768a811 100644
|
| --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| @@ -638,28 +638,19 @@ void PrintPreviewHandler::HandleGetPrinters(const base::ListValue* /*args*/) {
|
| }
|
|
|
| void PrintPreviewHandler::HandleGetPrivetPrinters(const base::ListValue* args) {
|
| + if (!PrivetPrintingEnabled())
|
| + return web_ui()->CallJavascriptFunction("onPrivetPrinterSearchDone");
|
| #if defined(ENABLE_SERVICE_DISCOVERY)
|
| - if (PrivetPrintingEnabled()) {
|
| - Profile* profile = Profile::FromWebUI(web_ui());
|
| - service_discovery_client_ =
|
| - local_discovery::ServiceDiscoverySharedClient::GetInstance();
|
| - printer_lister_.reset(new local_discovery::PrivetLocalPrinterLister(
|
| - service_discovery_client_.get(),
|
| - profile->GetRequestContext(),
|
| - this));
|
| - printer_lister_->Start();
|
| - }
|
| -#endif
|
| -
|
| - if (!PrivetPrintingEnabled()) {
|
| - web_ui()->CallJavascriptFunction("onPrivetPrinterSearchDone");
|
| - }
|
| + local_discovery::ServiceDiscoverySharedClient::GetInstanceWithoutAlert(
|
| + base::Bind(&PrintPreviewHandler::StartPrivetLister,
|
| + weak_factory_.GetWeakPtr()));
|
| +#endif // ENABLE_SERVICE_DISCOVERY
|
| }
|
|
|
| void PrintPreviewHandler::HandleStopGetPrivetPrinters(
|
| const base::ListValue* args) {
|
| #if defined(ENABLE_SERVICE_DISCOVERY)
|
| - if (PrivetPrintingEnabled()) {
|
| + if (PrivetPrintingEnabled() && printer_lister_) {
|
| printer_lister_->Stop();
|
| }
|
| #endif
|
| @@ -1364,6 +1355,20 @@ bool PrintPreviewHandler::GetPreviewDataAndTitle(
|
| }
|
|
|
| #if defined(ENABLE_SERVICE_DISCOVERY)
|
| +
|
| +void PrintPreviewHandler::StartPrivetLister(
|
| + scoped_refptr<local_discovery::ServiceDiscoverySharedClient> client) {
|
| + if (!PrivetPrintingEnabled())
|
| + return web_ui()->CallJavascriptFunction("onPrivetPrinterSearchDone");
|
| +
|
| + Profile* profile = Profile::FromWebUI(web_ui());
|
| + DCHECK(!service_discovery_client_ || service_discovery_client_ == client);
|
| + service_discovery_client_ = client;
|
| + printer_lister_.reset(new local_discovery::PrivetLocalPrinterLister(
|
| + service_discovery_client_.get(), profile->GetRequestContext(), this));
|
| + printer_lister_->Start();
|
| +}
|
| +
|
| void PrintPreviewHandler::LocalPrinterChanged(
|
| bool added,
|
| const std::string& name,
|
| @@ -1464,7 +1469,8 @@ void PrintPreviewHandler::OnPrivetCapabilities(
|
| const base::DictionaryValue* capabilities) {
|
| std::string name = privet_capabilities_operation_->GetHTTPClient()->GetName();
|
|
|
| - if (!capabilities || capabilities->HasKey(local_discovery::kPrivetKeyError)) {
|
| + if (!capabilities || capabilities->HasKey(local_discovery::kPrivetKeyError) ||
|
| + !printer_lister_) {
|
| SendPrivetCapabilitiesError(name);
|
| return;
|
| }
|
| @@ -1514,7 +1520,7 @@ bool PrintPreviewHandler::CreatePrivetHTTP(
|
| const local_discovery::PrivetHTTPAsynchronousFactory::ResultCallback&
|
| callback) {
|
| const local_discovery::DeviceDescription* device_description =
|
| - printer_lister_->GetDeviceDescription(name);
|
| + printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL;
|
|
|
| if (!device_description) {
|
| SendPrivetCapabilitiesError(name);
|
|
|