1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_TRANSLATE_CONTENT_RENDERER_RENDERER_CLD_DATA_PROVIDER_H_
6 #define COMPONENTS_TRANSLATE_CONTENT_RENDERER_RENDERER_CLD_DATA_PROVIDER_H_
8 #include "base/callback.h"
9 #include "base/macros.h"
10 #include "ipc/ipc_listener.h"
18 // Renderer-side interface responsible for providing CLD data.
19 // The embedder should set an instance as soon as feasible during startup.
20 // The implementation must be paired with a browser-side implementation of
21 // the BrowserCldDataProvider class, typically created by a
22 // BrowserCldDataProviderFactory:
23 // ../browser/browser_cld_data_provider_factory.h
24 // ../browser/browser_cld_data_provider.h
26 // The glue between the browser and renderer processes is typically a pair of
27 // request/response IPC messages using the CldDataProviderMsgStart
28 // "IPCMessageStart" enumerated constant from ipc_message_start.h.
29 class RendererCldDataProvider
: public IPC::Listener
{
31 RendererCldDataProvider();
32 ~RendererCldDataProvider() override
{}
34 // (Inherited from IPC::Listener)
35 // If the specified message is a response for CLD data, attempts to
36 // initialize CLD2 and returns true in all cases. If initialization is
37 // successful and a callback has been configured via
38 // SetCldAvailableCallback(...), that callback is invoked from the message
40 // This method is defined as virtual in order to force the implementation to
41 // define the specific IPC message(s) that it handles.
42 // The default implementation does nothing and returns false.
43 bool OnMessageReceived(const IPC::Message
& message
) override
;
45 // Invoked by the renderer process to request that CLD data be obtained and
46 // that CLD be initialized with it. The implementation is expected to
47 // communicate with the paired BrowserCldDataProvider implementation on the
49 // This method must be invoked on the message loop thread.
50 // The default implementation does nothing.
51 virtual void SendCldDataRequest() {}
53 // Convenience method that tracks whether or not CLD data is available.
54 // This method can be used in the absence of a callback (i.e., if the caller
55 // wants a simple way to check the state of CLD data availability without
56 // keeping a separate boolean flag tripped by a callback).
57 // The default implementation always returns true.
58 virtual bool IsCldDataAvailable();
60 // Sets a callback that will be invoked when CLD data is successfully
61 // obtained from the paired BrowserCldDataProvider implementation on the
62 // browser side, after CLD has been successfully initialized.
63 // Both the initialization of CLD2 as well as the invocation of the callback
64 // must happen on the message loop thread.
65 // The default implementation immediately invokes the callback.
66 virtual void SetCldAvailableCallback(base::Callback
<void(void)> callback
);
69 DISALLOW_COPY_AND_ASSIGN(RendererCldDataProvider
);
72 } // namespace translate
74 #endif // COMPONENTS_TRANSLATE_CONTENT_RENDERER_RENDERER_CLD_DATAP_PROVIDER_H_