Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2151)

Unified Diff: components/translate/content/renderer/renderer_cld_data_provider.h

Issue 461633002: Refactor language detection logic to allow non-static CLD data sources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make some of the harness factory methods private Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698