12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DBUS_PRINTER_SERVICE_PROVIDER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DBUS_PRINTER_SERVICE_PROVIDER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/dbus/cros_dbus_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/exported_object.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace dbus { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MethodCall; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Response; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class provides printer service for CrosDBusService. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// It detects attached printers and show user help page. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The following methods are exported. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Interface: org.chromium.LibCrosServiceInterface (kLibCrosServiceInterface) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Method: PrinterAdded (kPrinterAdded) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parameters: string:vendor Optional, USB vendor ID. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// string:product Optional, USB product ID. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Display help page to advice user to use Cloud Print. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The returned signal will contain the three values: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This service can be manually tested dbus-send on ChromeOS. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 1. Open a terminal and run the following: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// % dbus-send --system --type=method_call 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// --dest=org.chromium.LibCrosService /org/chromium/LibCrosService 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// org.chromium.LibCrosServiceInterface.PrinterAdded 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// string:123 string:456 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 2. Go back to ChromeOS and check if new tab with information is opened. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrinterServiceProvider 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public CrosDBusService::ServiceProviderInterface { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrinterServiceProvider(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~PrinterServiceProvider(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CrosDBusService::ServiceProviderInterface override. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Start( 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<dbus::ExportedObject> exported_object) OVERRIDE; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ShowCloudPrintHelp(const std::string& vendor, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& product); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called from ExportedObject, when PrinterAdded() is exported as 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // a D-Bus method, or failed to be exported. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnExported(const std::string& interface_name, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& method_name, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool success); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invoked when usb printer is detected. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called on UI thread from dbus request. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PrinterAdded(dbus::MethodCall* method_call, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::ExportedObject::ResponseSender response_sender); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<dbus::ExportedObject> exported_object_; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<PrinterServiceProvider> weak_ptr_factory_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrinterServiceProvider); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_DBUS_PRINTER_SERVICE_PROVIDER_H_ 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82