Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 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_MESSAGING_BINDINGS_H_
      6 #define CHROME_RENDERER_EXTENSIONS_MESSAGING_BINDINGS_H_
      7 
      8 #include <string>
      9 
     10 #include "chrome/renderer/extensions/chrome_v8_context_set.h"
     11 
     12 namespace base {
     13 class DictionaryValue;
     14 }
     15 
     16 namespace content {
     17 class RenderView;
     18 }
     19 
     20 namespace v8 {
     21 class Extension;
     22 }
     23 
     24 namespace extensions {
     25 class ChromeV8Extension;
     26 class Dispatcher;
     27 struct Message;
     28 
     29 // Manually implements JavaScript bindings for extension messaging.
     30 //
     31 // TODO(aa): This should all get re-implemented using SchemaGeneratedBindings.
     32 // If anything needs to be manual for some reason, it should be implemented in
     33 // its own class.
     34 class MessagingBindings {
     35  public:
     36   // Creates an instance of the extension.
     37   static ChromeV8Extension* Get(Dispatcher* dispatcher,
     38                                 ChromeV8Context* context);
     39 
     40   // Dispatches the onConnect content script messaging event to some contexts
     41   // in |contexts|. If |restrict_to_render_view| is specified, only contexts in
     42   // that render view will receive the message.
     43   static void DispatchOnConnect(
     44       const ChromeV8ContextSet::ContextSet& contexts,
     45       int target_port_id,
     46       const std::string& channel_name,
     47       const base::DictionaryValue& source_tab,
     48       const std::string& source_extension_id,
     49       const std::string& target_extension_id,
     50       const GURL& source_url,
     51       const std::string& tls_channel_id,
     52       content::RenderView* restrict_to_render_view);
     53 
     54   // Delivers a message sent using content script messaging to some of the
     55   // contexts in |bindings_context_set|. If |restrict_to_render_view| is
     56   // specified, only contexts in that render view will receive the message.
     57   static void DeliverMessage(
     58       const ChromeV8ContextSet::ContextSet& context_set,
     59       int target_port_id,
     60       const Message& message,
     61       content::RenderView* restrict_to_render_view);
     62 
     63   // Dispatches the onDisconnect event in response to the channel being closed.
     64   static void DispatchOnDisconnect(
     65       const ChromeV8ContextSet::ContextSet& context_set,
     66       int port_id,
     67       const std::string& error_message,
     68       content::RenderView* restrict_to_render_view);
     69 };
     70 
     71 }  // namespace extensions
     72 
     73 #endif  // CHROME_RENDERER_EXTENSIONS_MESSAGING_BINDINGS_H_
     74