blob: da99c062d167964e2ddf3fc4143d5f5bb2ee895e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATA_PROVIDER_H_
#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATA_PROVIDER_H_
#include <string>
#include "base/files/file_path.h"
#include "ipc/ipc_listener.h"
namespace IPC {
class Message;
}
namespace content {
class WebContents;
}
namespace translate {
// Browser-side interface responsible for providing CLD data.
// The implementation must be paired with a renderer-side implementation of
// the RendererCldDataProvider class:
//
// components/translate/content/renderer/renderer_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
class BrowserCldDataProvider : public IPC::Listener {
public:
~BrowserCldDataProvider() override {}
// IPC::Listener implementation:
// If the specified message is a request for CLD data, invokes
// OnCldDataRequest() and returns true. In all other cases, this method does
// nothing. 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&) override = 0;
// Called when the browser process receives an appropriate message in
// OnMessageReceived, above. The implementation should attempt to locate
// the CLD data, cache any metadata required for accessing that data, and
// ultimately trigger a response by invoking SendCldDataResponse.
//
// The renderer process may poll for data, in which case this method may be
// repeatedly invoked. The implementation must be safe to call any number
// of times.
virtual void OnCldDataRequest() = 0;
// Invoked when OnCldDataRequest, above, results in a successful lookup or
// the data is already cached and ready to respond to. The implementation
// should take whatever action is appropriate for responding to the paired
// RendererCldDataProvider, typically by sending an IPC response.
virtual void SendCldDataResponse() = 0;
};
// Static factory function defined by the implementation that produces a new
// provider for the specified WebContents.
BrowserCldDataProvider* CreateBrowserCldDataProviderFor(
content::WebContents*);
// For data sources that support a separate CLD data file, configures the path
// of that data file.
//
// The 'component' and 'standalone' data sources need this method to be called
// in order to locate the CLD data on disk.
// If the data source doesn't need or doesn't support such configuration, this
// function should do nothing. This is the case for, e.g., the static data
// source.
void SetCldDataFilePath(const base::FilePath& path);
// Returns the path most recently set by SetCldDataFilePath. The initial value
// prior to any such call is the empty path. If the data source doesn't support
// a data file, returns the empty path.
base::FilePath GetCldDataFilePath();
} // namespace translate
#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_BROWSER_CLD_DATA_PROVIDER_H_