Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 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 EXTENSIONS_BROWSER_EXTENSION_MESSAGE_FILTER_H_
      6 #define EXTENSIONS_BROWSER_EXTENSION_MESSAGE_FILTER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/compiler_specific.h"
     12 #include "base/macros.h"
     13 #include "base/memory/weak_ptr.h"
     14 #include "content/public/browser/browser_message_filter.h"
     15 #include "url/gurl.h"
     16 
     17 struct ExtensionHostMsg_Request_Params;
     18 
     19 namespace base {
     20 class DictionaryValue;
     21 }
     22 
     23 namespace content {
     24 class BrowserContext;
     25 class WebContents;
     26 }
     27 
     28 namespace extensions {
     29 
     30 class InfoMap;
     31 
     32 // This class filters out incoming extension-specific IPC messages from the
     33 // renderer process. It is created on the UI thread. Messages may be handled on
     34 // the IO thread or the UI thread.
     35 class ExtensionMessageFilter : public content::BrowserMessageFilter {
     36  public:
     37   ExtensionMessageFilter(int render_process_id,
     38                          content::BrowserContext* context);
     39 
     40   int render_process_id() { return render_process_id_; }
     41 
     42  private:
     43   friend class content::BrowserThread;
     44   friend class base::DeleteHelper<ExtensionMessageFilter>;
     45 
     46   virtual ~ExtensionMessageFilter();
     47 
     48   // content::BrowserMessageFilter implementation.
     49   virtual void OverrideThreadForMessage(
     50       const IPC::Message& message,
     51       content::BrowserThread::ID* thread) OVERRIDE;
     52   virtual void OnDestruct() const OVERRIDE;
     53   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     54 
     55   // Message handlers on the UI thread.
     56   void OnExtensionAddListener(const std::string& extension_id,
     57                               const GURL& listener_url,
     58                               const std::string& event_name);
     59   void OnExtensionRemoveListener(const std::string& extension_id,
     60                                  const GURL& listener_url,
     61                                  const std::string& event_name);
     62   void OnExtensionAddLazyListener(const std::string& extension_id,
     63                                   const std::string& event_name);
     64   void OnExtensionAttachGuest(int routing_id,
     65                               int element_instance_id,
     66                               int guest_instance_id,
     67                               const base::DictionaryValue& attach_params);
     68   void OnExtensionCreateMimeHandlerViewGuest(int render_frame_id,
     69                                              const std::string& url,
     70                                              const std::string& mime_type,
     71                                              int element_instance_id);
     72   void OnExtensionRemoveLazyListener(const std::string& extension_id,
     73                                      const std::string& event_name);
     74   void OnExtensionAddFilteredListener(const std::string& extension_id,
     75                                       const std::string& event_name,
     76                                       const base::DictionaryValue& filter,
     77                                       bool lazy);
     78   void OnExtensionRemoveFilteredListener(const std::string& extension_id,
     79                                          const std::string& event_name,
     80                                          const base::DictionaryValue& filter,
     81                                          bool lazy);
     82   void OnExtensionShouldSuspendAck(const std::string& extension_id,
     83                                    int sequence_id);
     84   void OnExtensionSuspendAck(const std::string& extension_id);
     85   void OnExtensionTransferBlobsAck(const std::vector<std::string>& blob_uuids);
     86 
     87   // Message handlers on the IO thread.
     88   void OnExtensionGenerateUniqueID(int* unique_id);
     89   void OnExtensionResumeRequests(int route_id);
     90   void OnExtensionRequestForIOThread(
     91       int routing_id,
     92       const ExtensionHostMsg_Request_Params& params);
     93 
     94   // Runs on UI thread.
     95   void MimeHandlerViewGuestCreatedCallback(int element_instance_id,
     96                                            int embedder_render_process_id,
     97                                            int embedder_render_frame_id,
     98                                            const std::string& src,
     99                                            content::WebContents* web_contents);
    100 
    101   const int render_process_id_;
    102 
    103   // Should only be accessed on the UI thread.
    104   content::BrowserContext* browser_context_;
    105 
    106   scoped_refptr<extensions::InfoMap> extension_info_map_;
    107 
    108   // Weak pointers produced by this factory are bound to the IO thread.
    109   base::WeakPtrFactory<ExtensionMessageFilter> weak_ptr_factory_;
    110 
    111   DISALLOW_COPY_AND_ASSIGN(ExtensionMessageFilter);
    112 };
    113 
    114 }  // namespace extensions
    115 
    116 #endif  // EXTENSIONS_BROWSER_EXTENSION_MESSAGE_FILTER_H_
    117