Index: components/translate/content/renderer/renderer_cld_data_provider.h |
diff --git a/components/translate/content/renderer/renderer_cld_data_provider.h b/components/translate/content/renderer/renderer_cld_data_provider.h |
index fb0a333320f6ba4a73ee2c2a0d60c23032cc70aa..7d20bb72d1cacded374473bbd838ba153d9fbc8d 100644 |
--- a/components/translate/content/renderer/renderer_cld_data_provider.h |
+++ b/components/translate/content/renderer/renderer_cld_data_provider.h |
@@ -6,29 +6,29 @@ |
#define COMPONENTS_TRANSLATE_CONTENT_RENDERER_RENDERER_CLD_DATA_PROVIDER_H_ |
#include "base/callback.h" |
+#include "base/macros.h" |
#include "ipc/ipc_listener.h" |
namespace IPC { |
class Message; |
} |
-namespace content { |
-class RenderViewObserver; |
-} |
- |
namespace translate { |
// Renderer-side interface responsible for providing CLD data. |
+// The embedder should set an instance as soon as feasible during startup. |
// The implementation must be paired with a browser-side implementation of |
-// the BrowserCldDataProvider class: |
-// |
-// components/translate/content/browser/browser_cld_data_provider.h |
+// the BrowserCldDataProvider class, typically created by a |
+// BrowserCldDataProviderFactory: |
+// ../browser/browser_cld_data_provider_factory.h |
+// ../browser/browser_cld_data_provider.h |
// |
-// ... and the glue between them is typically a pair of request/response IPC |
-// messages using the CldDataProviderMsgStart IPCMessageStart enumerated |
-// constant from ipc_message_start.h |
+// The glue between the browser and renderer processes is typically a pair of |
+// request/response IPC messages using the CldDataProviderMsgStart |
+// "IPCMessageStart" enumerated constant from ipc_message_start.h. |
class RendererCldDataProvider : public IPC::Listener { |
public: |
+ RendererCldDataProvider() {} |
~RendererCldDataProvider() override {} |
// (Inherited from IPC::Listener) |
@@ -39,33 +39,62 @@ class RendererCldDataProvider : public IPC::Listener { |
// loop thread. |
// This method is defined as virtual in order to force the implementation to |
// define the specific IPC message(s) that it handles. |
- virtual bool OnMessageReceived(const IPC::Message&) = 0; |
+ // The default implementation does nothing and returns false. |
+ virtual bool OnMessageReceived(const IPC::Message& message) override; |
// Invoked by the renderer process to request that CLD data be obtained and |
// that CLD be initialized with it. The implementation is expected to |
// communicate with the paired BrowserCldDataProvider implementation on the |
// browser side. |
// This method must be invoked on the message loop thread. |
- virtual void SendCldDataRequest() = 0; |
+ // The default implementation does nothing. |
+ virtual void SendCldDataRequest() {} |
// Convenience method that tracks whether or not CLD data is available. |
// This method can be used in the absence of a callback (i.e., if the caller |
// wants a simple way to check the state of CLD data availability without |
// keeping a separate boolean flag tripped by a callback). |
- virtual bool IsCldDataAvailable() = 0; |
+ // The default implementation always returns true. |
+ virtual bool IsCldDataAvailable(); |
// Sets a callback that will be invoked when CLD data is successfully |
// obtained from the paired BrowserCldDataProvider implementation on the |
// browser side, after CLD has been successfully initialized. |
// Both the initialization of CLD2 as well as the invocation of the callback |
// must happen on the message loop thread. |
- virtual void SetCldAvailableCallback(base::Callback<void(void)>) = 0; |
-}; |
+ // The default implementation immediately invokes the callback. |
+ virtual void SetCldAvailableCallback(base::Callback<void(void)> callback); |
+ |
+ // Sets the default data provider for this process, i.e. the provider to be |
+ // used unless the embedder calls Set(RendererCldDataProvider*). This is the |
+ // method that normal (i.e., non-test) Chromium code should use; embedders can |
+ // and should use the unconditional Set(RendererCldDataProvider*) method |
+ // instead. If a default provider has already been set, this method does |
+ // nothing. |
+ static void SetDefault(RendererCldDataProvider* instance); |
-// Static factory function defined by the implementation that produces a new |
-// provider for the specified render view host. |
-RendererCldDataProvider* CreateRendererCldDataProviderFor( |
- content::RenderViewObserver*); |
+ // Unconditionally sets the data provider for this process, overwriting any |
+ // previously-configured default. Normal Chromium code should never use this |
+ // method; it is provided for embedders to inject a provider from outside of |
+ // the Chromium code base. Test code can also use this method to force the |
+ // runtime to have a desired behavior. |
+ // |
+ // The caller is responsible for the lifecycle of the instance. In general, |
+ // the instance passed here should live throughout the lifetime of the |
+ // process. |
+ static void Set(RendererCldDataProvider* instance); |
+ |
+ // Returns true if and only if the current instance for this process is not |
+ // NULL. |
+ static bool IsInitialized(); |
+ |
+ // Returns the instance of the provider previously set by Set(...). |
+ // If no instance has been set, a default no-op provider will be returned. |
+ static RendererCldDataProvider* Get(); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(RendererCldDataProvider); |
+}; |
} // namespace translate |