browser_cld_data_provider.h revision 116680a4aac90f2aa7413d9095a592090648e557
1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATA_PROVIDER_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATA_PROVIDER_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ipc/ipc_listener.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace IPC { 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Message; 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content { 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebContents; 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace translate { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Browser-side interface responsible for providing CLD data. 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// The implementation must be paired with a renderer-side implementation of 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// the RendererCldDataProvider class: 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// components/translate/content/renderer/renderer_cld_data_provider.h 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// ... and the glue between them is typically a pair of request/response IPC 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// messages using the CldDataProviderMsgStart IPCMessageStart enumerated 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// constant from ipc_message_start.h 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BrowserCldDataProvider : public IPC::Listener { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~BrowserCldDataProvider() {} 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // IPC::Listener implementation: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // If the specified message is a request for CLD data, invokes 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // OnCldDataRequest() and returns true. In all other cases, this method does 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // nothing. This method is defined as virtual in order to force the 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // implementation to define the specific IPC message(s) that it handles. 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool OnMessageReceived(const IPC::Message&) = 0; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Called when the browser process receives an appropriate message in 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // OnMessageReceived, above. The implementation should attempt to locate 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the CLD data, cache any metadata required for accessing that data, and 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ultimately trigger a response by invoking SendCldDataResponse. 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The renderer process may poll for data, in which case this method may be 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // repeatedly invoked. The implementation must be safe to call any number 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // of times. 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnCldDataRequest() = 0; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoked when OnCldDataRequest, above, results in a successful lookup or 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the data is already cached and ready to respond to. The implementation 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // should take whatever action is appropriate for responding to the paired 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // RendererCldDataProvider, typically by sending an IPC response. 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SendCldDataResponse() = 0; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Static factory function defined by the implementation that produces a new 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// provider for the specified WebContents. 59116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBrowserCldDataProvider* CreateBrowserCldDataProviderFor( 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents*); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace translate 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATAP_PROVIDER_H_ 65