// Copyright (c) 2011 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 CHROME_COMMON_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_ #define CHROME_COMMON_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_ #pragma once #include #include "ipc/ipc_message.h" #include "webkit/glue/resource_loader_bridge.h" // The ExtensionLocalizationPeer is a proxy to a // webkit_glue::ResourceLoaderBridge::Peer instance. It is used to pre-process // CSS files requested by extensions to replace localization templates with the // appropriate localized strings. // // Call the factory method CreateExtensionLocalizationPeer() to obtain an // instance of ExtensionLocalizationPeer based on the original Peer. class ExtensionLocalizationPeer : public webkit_glue::ResourceLoaderBridge::Peer { public: virtual ~ExtensionLocalizationPeer(); static ExtensionLocalizationPeer* CreateExtensionLocalizationPeer( webkit_glue::ResourceLoaderBridge::Peer* peer, IPC::Message::Sender* message_sender, const std::string& mime_type, const GURL& request_url); // ResourceLoaderBridge::Peer methods. virtual void OnUploadProgress(uint64 position, uint64 size); virtual bool OnReceivedRedirect( const GURL& new_url, const webkit_glue::ResourceResponseInfo& info, bool* has_new_first_party_for_cookies, GURL* new_first_party_for_cookies); virtual void OnReceivedResponse( const webkit_glue::ResourceResponseInfo& info, bool content_filtered); virtual void OnDownloadedData(int len) {} virtual void OnReceivedData(const char* data, int len); virtual void OnCompletedRequest(const net::URLRequestStatus& status, const std::string& security_info, const base::Time& completion_time); private: friend class ExtensionLocalizationPeerTest; // Use CreateExtensionLocalizationPeer to create an instance. ExtensionLocalizationPeer( webkit_glue::ResourceLoaderBridge::Peer* peer, IPC::Message::Sender* message_sender, const GURL& request_url); // Loads message catalogs, and replaces all __MSG_some_name__ templates within // loaded file. void ReplaceMessages(); // Original peer that handles the request once we are done processing data_. webkit_glue::ResourceLoaderBridge::Peer* original_peer_; // We just pass though the response info. This holds the copy of the original. webkit_glue::ResourceResponseInfo response_info_; // Sends ViewHostMsg_GetExtensionMessageBundle message to the browser to fetch // message catalog. IPC::Message::Sender* message_sender_; // Buffer for incoming data. We wait until OnCompletedRequest before using it. std::string data_; // Original request URL. GURL request_url_; private: DISALLOW_COPY_AND_ASSIGN(ExtensionLocalizationPeer); }; #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_