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