1 // Copyright 2013 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. 4 5 #ifndef CHROME_RENDERER_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_ 6 #define CHROME_RENDERER_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_ 7 8 #include <string> 9 10 #include "content/public/child/request_peer.h" 11 #include "content/public/common/resource_response_info.h" 12 13 namespace IPC { 14 class Sender; 15 } 16 17 // The ExtensionLocalizationPeer is a proxy to a 18 // content::RequestPeer instance. It is used to pre-process 19 // CSS files requested by extensions to replace localization templates with the 20 // appropriate localized strings. 21 // 22 // Call the factory method CreateExtensionLocalizationPeer() to obtain an 23 // instance of ExtensionLocalizationPeer based on the original Peer. 24 class ExtensionLocalizationPeer : public content::RequestPeer { 25 public: 26 virtual ~ExtensionLocalizationPeer(); 27 28 static ExtensionLocalizationPeer* CreateExtensionLocalizationPeer( 29 content::RequestPeer* peer, 30 IPC::Sender* message_sender, 31 const std::string& mime_type, 32 const GURL& request_url); 33 34 // content::RequestPeer methods. 35 virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE; 36 virtual bool OnReceivedRedirect( 37 const net::RedirectInfo& redirect_info, 38 const content::ResourceResponseInfo& info) OVERRIDE; 39 virtual void OnReceivedResponse( 40 const content::ResourceResponseInfo& info) OVERRIDE; OnDownloadedData(int len,int encoded_data_length)41 virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE {} 42 virtual void OnReceivedData(const char* data, 43 int data_length, 44 int encoded_data_length) OVERRIDE; 45 virtual void OnCompletedRequest(int error_code, 46 bool was_ignored_by_handler, 47 bool stale_copy_in_cache, 48 const std::string& security_info, 49 const base::TimeTicks& completion_time, 50 int64 total_transfer_size) OVERRIDE; 51 52 private: 53 friend class ExtensionLocalizationPeerTest; 54 55 // Use CreateExtensionLocalizationPeer to create an instance. 56 ExtensionLocalizationPeer(content::RequestPeer* peer, 57 IPC::Sender* message_sender, 58 const GURL& request_url); 59 60 // Loads message catalogs, and replaces all __MSG_some_name__ templates within 61 // loaded file. 62 void ReplaceMessages(); 63 64 // Original peer that handles the request once we are done processing data_. 65 content::RequestPeer* original_peer_; 66 67 // We just pass though the response info. This holds the copy of the original. 68 content::ResourceResponseInfo response_info_; 69 70 // Sends ExtensionHostMsg_GetMessageBundle message to the browser to fetch 71 // message catalog. 72 IPC::Sender* message_sender_; 73 74 // Buffer for incoming data. We wait until OnCompletedRequest before using it. 75 std::string data_; 76 77 // Original request URL. 78 GURL request_url_; 79 80 private: 81 DISALLOW_COPY_AND_ASSIGN(ExtensionLocalizationPeer); 82 }; 83 84 #endif // CHROME_RENDERER_EXTENSIONS_EXTENSION_LOCALIZATION_PEER_H_ 85