Index: extensions/browser/api/printer_provider/printer_provider_api.h |
diff --git a/extensions/browser/api/printer_provider/printer_provider_api.h b/extensions/browser/api/printer_provider/printer_provider_api.h |
index 0bd3e4c3fea2dfca9ee142c6f75244de2c9ac0ce..c2317d1cf14fe634693e45025d20fdbd74ea27a0 100644 |
--- a/extensions/browser/api/printer_provider/printer_provider_api.h |
+++ b/extensions/browser/api/printer_provider/printer_provider_api.h |
@@ -5,17 +5,10 @@ |
#ifndef EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_ |
#define EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_ |
-#include <map> |
-#include <set> |
#include <string> |
#include "base/callback.h" |
-#include "base/macros.h" |
-#include "base/memory/ref_counted_memory.h" |
-#include "base/scoped_observer.h" |
-#include "extensions/browser/api/printer_provider_internal/printer_provider_internal_api_observer.h" |
-#include "extensions/browser/browser_context_keyed_api_factory.h" |
-#include "extensions/browser/extension_registry_observer.h" |
+#include "components/keyed_service/core/keyed_service.h" |
namespace base { |
class DictionaryValue; |
@@ -27,41 +20,14 @@ class BrowserContext; |
} |
namespace extensions { |
-class Extension; |
-class ExtensionRegistry; |
-class PrinterProviderInternalAPI; |
+struct PrinterProviderPrintJob; |
} |
namespace extensions { |
// Implements chrome.printerProvider API events. |
-class PrinterProviderAPI : public BrowserContextKeyedAPI, |
- public PrinterProviderInternalAPIObserver, |
- public ExtensionRegistryObserver { |
+class PrinterProviderAPI : public KeyedService { |
public: |
- // Struct describing print job that should be forwarded to an extension via |
- // chrome.printerProvider.onPrintRequested event. |
- struct PrintJob { |
- PrintJob(); |
- ~PrintJob(); |
- |
- // The id of the printer that should handle the print job. The id is |
- // formatted as <extension_id>:<printer_id>, where <extension_id> is the |
- // id of the extension that manages the printer, and <printer_id> is |
- // the the printer's id within the extension (as reported via |
- // chrome.printerProvider.onGetPrintersRequested event callback). |
- std::string printer_id; |
- |
- // The print job ticket. |
- std::string ticket_json; |
- |
- // Content type of the document that should be printed. |
- std::string content_type; |
- |
- // The document data that should be printed. |
- scoped_refptr<base::RefCountedMemory> document_bytes; |
- }; |
- |
using GetPrintersCallback = |
base::Callback<void(const base::ListValue& printers, bool done)>; |
using GetCapabilityCallback = |
@@ -69,25 +35,20 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, |
using PrintCallback = |
base::Callback<void(bool success, const std::string& error)>; |
- static BrowserContextKeyedAPIFactory<PrinterProviderAPI>* |
- GetFactoryInstance(); |
+ static PrinterProviderAPI* Create(content::BrowserContext* context); |
+ // Returns generic error string for print request. |
static std::string GetDefaultPrintError(); |
- explicit PrinterProviderAPI(content::BrowserContext* browser_context); |
- ~PrinterProviderAPI() override; |
+ // The API currently cannot handle very large files, so the document size that |
+ // may be sent to an extension is restricted. |
+ // TODO(tbarzic): Fix the API to support huge documents. |
+ static const int kMaxDocumentSize = 50 * 1000 * 1000; |
+ |
+ ~PrinterProviderAPI() override {} |
- // Requests list of supported printers from extensions implementing |
- // chrome.printerProvider API. It dispatches |
- // chrome.printerProvider.onGetPrintersRequested event. The callback is |
- // called once for every extension handling the event with a list of its |
- // supported printers. The printer values reported by an extension are |
- // added "extensionId" property that is set to the ID of the extension |
- // returning the list. |
- // Note that the "id" property of printer values reported by an extension are |
- // rewriten as "<extension_id>:<id>" to ensure they are unique across |
- // different extensions. |
- void DispatchGetPrintersRequested(const GetPrintersCallback& callback); |
+ virtual void DispatchGetPrintersRequested( |
+ const GetPrintersCallback& callback) = 0; |
// Requests printer capability for a printer with id |printer_id|. |
// |printer_id| should be one of the printer ids reported by |GetPrinters| |
@@ -97,191 +58,19 @@ class PrinterProviderAPI : public BrowserContextKeyedAPI, |
// |printer_id| value). |
// |callback| is passed a dictionary value containing printer capabilities as |
// reported by the extension. |
- void DispatchGetCapabilityRequested(const std::string& printer_id, |
- const GetCapabilityCallback& callback); |
+ virtual void DispatchGetCapabilityRequested( |
+ const std::string& printer_id, |
+ const GetCapabilityCallback& callback) = 0; |
// It dispatches chrome.printerProvider.onPrintRequested event with the |
// provided print job. The event is dispatched only to the extension that |
// manages printer with id |job.printer_id|. |
// |callback| is passed the print status returned by the extension, and it |
// must not be null. |
- void DispatchPrintRequested(const PrintJob& job, |
- const PrintCallback& callback); |
- |
- // The API currently cannot handle very large files, so the document size that |
- // may be sent to an extension is restricted. |
- // TODO(tbarzic): Fix the API to support huge documents. |
- static const int kMaxDocumentSize = 50 * 1000 * 1000; |
- |
- private: |
- friend class BrowserContextKeyedAPIFactory<PrinterProviderAPI>; |
- |
- // Holds information about a pending onGetPrintersRequested request; |
- // in particular, the list of extensions to which the event was dispatched but |
- // which haven't yet responded, and the |GetPrinters| callback associated with |
- // the event. |
- class GetPrintersRequest { |
- public: |
- explicit GetPrintersRequest(const GetPrintersCallback& callback); |
- ~GetPrintersRequest(); |
- |
- // Adds an extension id to the list of the extensions that need to respond |
- // to the event. |
- void AddSource(const std::string& extension_id); |
- |
- // Whether all extensions have responded to the event. |
- bool IsDone() const; |
- |
- // Runs the callback for an extension and removes the extension from the |
- // list of extensions that still have to respond to the event. |
- void ReportForExtension(const std::string& extension_id, |
- const base::ListValue& printers); |
- |
- private: |
- // Callback reporting event result for an extension. Called once for each |
- // extension. |
- GetPrintersCallback callback_; |
- |
- // The list of extensions that still have to respond to the event. |
- std::set<std::string> extensions_; |
- }; |
- |
- // Keeps track of pending chrome.printerProvider.onGetPrintersRequested |
- // requests. |
- class PendingGetPrintersRequests { |
- public: |
- PendingGetPrintersRequests(); |
- ~PendingGetPrintersRequests(); |
- |
- // Adds a new request to the set of pending requests. Returns the id |
- // assigned to the request. |
- int Add(const GetPrintersCallback& callback); |
- |
- // Completes a request for an extension. It runs the request callback with |
- // values reported by the extension. |
- bool CompleteForExtension(const std::string& extension_id, |
- int request_id, |
- const base::ListValue& result); |
- |
- // Runs callbacks for the extension for all requests that are waiting for a |
- // response from the extension with the provided extension id. Callbacks are |
- // called as if the extension reported empty set of printers. |
- void FailAllForExtension(const std::string& extension_id); |
- |
- // Adds an extension id to the list of the extensions that need to respond |
- // to the event. |
- bool AddSource(int request_id, const std::string& extension_id); |
- |
- private: |
- int last_request_id_; |
- std::map<int, GetPrintersRequest> pending_requests_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PendingGetPrintersRequests); |
- }; |
- |
- // Keeps track of pending chrome.printerProvider.onGetCapabilityRequested |
- // requests for an extension. |
- class PendingGetCapabilityRequests { |
- public: |
- PendingGetCapabilityRequests(); |
- ~PendingGetCapabilityRequests(); |
- |
- // Adds a new request to the set. Only information needed is the callback |
- // associated with the request. Returns the id assigned to the request. |
- int Add(const GetCapabilityCallback& callback); |
- |
- // Completes the request with the provided request id. It runs the request |
- // callback and removes the request from the set. |
- bool Complete(int request_id, const base::DictionaryValue& result); |
- |
- // Runs all pending callbacks with empty capability value and clears the |
- // set of pending requests. |
- void FailAll(); |
- |
- private: |
- int last_request_id_; |
- std::map<int, GetCapabilityCallback> pending_requests_; |
- }; |
- |
- // Keeps track of pending chrome.printerProvider.ontPrintRequested requests |
- // for an extension. |
- class PendingPrintRequests { |
- public: |
- PendingPrintRequests(); |
- ~PendingPrintRequests(); |
- |
- // Adds a new request to the set. Only information needed is the callback |
- // associated with the request. Returns the id assigned to the request. |
- int Add(const PrintCallback& callback); |
- |
- // Completes the request with the provided request id. It runs the request |
- // callback and removes the request from the set. |
- bool Complete(int request_id, bool success, const std::string& result); |
- |
- // Runs all pending callbacks with ERROR_FAILED and clears the set of |
- // pending requests. |
- void FailAll(); |
- |
- private: |
- int last_request_id_; |
- std::map<int, PrintCallback> pending_requests_; |
- }; |
- |
- // BrowserContextKeyedAPI implementation. |
- static const bool kServiceRedirectedInIncognito = true; |
- static const char* service_name() { return "PrinterProvider"; } |
- |
- // PrinterProviderInternalAPIObserver implementation: |
- void OnGetPrintersResult( |
- const Extension* extension, |
- int request_id, |
- const PrinterProviderInternalAPIObserver::PrinterInfoVector& result) |
- override; |
- void OnGetCapabilityResult(const Extension* extension, |
- int request_id, |
- const base::DictionaryValue& result) override; |
- void OnPrintResult( |
- const Extension* extension, |
- int request_id, |
- core_api::printer_provider_internal::PrintError error) override; |
- |
- // ExtensionRegistryObserver implementation: |
- void OnExtensionUnloaded(content::BrowserContext* browser_context, |
- const Extension* extension, |
- UnloadedExtensionInfo::Reason reason) override; |
- |
- // Called before chrome.printerProvider.onGetPrintersRequested event is |
- // dispatched to an extension. It returns whether the extension is interested |
- // in the event. If the extension listens to the event, it's added to the set |
- // of |request| sources. |request| is |GetPrintersRequest| object associated |
- // with the event. |
- bool WillRequestPrinters(int request_id, |
- content::BrowserContext* browser_context, |
- const Extension* extension, |
- base::ListValue* args); |
- |
- content::BrowserContext* browser_context_; |
- |
- PendingGetPrintersRequests pending_get_printers_requests_; |
- |
- std::map<std::string, PendingPrintRequests> pending_print_requests_; |
- |
- std::map<std::string, PendingGetCapabilityRequests> |
- pending_capability_requests_; |
- |
- ScopedObserver<PrinterProviderInternalAPI, PrinterProviderInternalAPIObserver> |
- internal_api_observer_; |
- |
- ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> |
- extension_registry_observer_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PrinterProviderAPI); |
+ virtual void DispatchPrintRequested(const PrinterProviderPrintJob& job, |
+ const PrintCallback& callback) = 0; |
}; |
-template <> |
-void BrowserContextKeyedAPIFactory< |
- PrinterProviderAPI>::DeclareFactoryDependencies(); |
- |
} // namespace extensions |
#endif // EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_API_H_ |