1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef EXTENSIONS_RENDERER_EXTENSION_HELPER_H_ 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define EXTENSIONS_RENDERER_EXTENSION_HELPER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/console_message_level.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer_tracker.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/common/view_type.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct ExtensionMsg_ExternalConnectionInfo; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DictionaryValue; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Dispatcher; 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)struct Message; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderView-level plumbing for extension features. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionHelper 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::RenderViewObserver, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::RenderViewObserverTracker<ExtensionHelper> { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a list of extension RenderViews that match the given filter 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // criteria. If |browser_window_id| is not extension_misc::kUnknownWindowId, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the list is restricted to views in that browser window. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::vector<content::RenderView*> GetExtensionViews( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int browser_window_id, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ViewType view_type); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the given extension's background page, or NULL if none. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static content::RenderView* GetBackgroundPage( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionHelper(content::RenderView* render_view, Dispatcher* dispatcher); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionHelper(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_id() const { return tab_id_; } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int browser_window_id() const { return browser_window_id_; } 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ViewType view_type() const { return view_type_; } 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Dispatcher* dispatcher() const { return dispatcher_; } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE; 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void DidMatchCSS( 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blink::WebLocalFrame* frame, 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebVector<blink::WebString>& newly_matching_selectors, 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebVector<blink::WebString>& stopped_matching_selectors) 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OVERRIDE; 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DraggableRegionsChanged(blink::WebFrame* frame) OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionResponse(int request_id, bool success, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue& response, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionMessageInvoke(const std::string& extension_id, 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string& module_name, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue& args, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool user_gesture); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnExtensionDispatchOnConnect( 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int target_port_id, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& channel_name, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& source_tab, 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const ExtensionMsg_ExternalConnectionInfo& info, 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& tls_channel_id); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionDeliverMessage(int target_port_id, 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Message& message); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnExtensionDispatchOnDisconnect(int port_id, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& error_message); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnNotifyRendererViewType(ViewType view_type); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetTabId(int tab_id); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateBrowserWindowId(int window_id); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAddMessageToConsole(content::ConsoleMessageLevel level, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& message); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAppWindowClosed(); 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void OnSetFrameName(const std::string& name); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dispatcher* dispatcher_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Type of view attached with RenderView. 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ViewType view_type_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Id of the tab which the RenderView is attached to. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_id_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Id number of browser window which RenderView is attached to. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int browser_window_id_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionHelper); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif // EXTENSIONS_RENDERER_EXTENSION_HELPER_H_ 107