1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string> 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <utility> 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/singleton.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebViewGuest; 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This class keeps track of <webview> renderer state for use on the IO thread. 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// All methods should be called on the IO thread. 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebViewRendererState { 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct WebViewInfo { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int embedder_process_id; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int instance_id; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string partition_id; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string embedder_extension_id; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static WebViewRendererState* GetInstance(); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Looks up the information for the embedder <webview> for a given render 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // view, if one exists. Called on the IO thread. 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool GetInfo(int guest_process_id, int guest_routing_id, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewInfo* webview_info); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Looks up the partition info for the embedder <webview> for a given guest 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // process. Called on the IO thread. 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool GetPartitionID(int guest_process_id, std::string* partition_id); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns true if the given renderer is used by webviews. 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsGuest(int render_process_id); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch friend class WebViewGuest; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch friend struct DefaultSingletonTraits<WebViewRendererState>; 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::pair<int, int> RenderId; 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::map<RenderId, WebViewInfo> WebViewInfoMap; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct WebViewPartitionInfo { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int web_view_count; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string partition_id; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewPartitionInfo() {} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewPartitionInfo(int count, std::string partition): 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_view_count(count), 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch partition_id(partition) {} 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::map<int, WebViewPartitionInfo> WebViewPartitionIDMap; 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewRendererState(); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~WebViewRendererState(); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adds or removes a <webview> guest render process from the set. 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AddGuest(int render_process_host_id, int routing_id, 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const WebViewInfo& webview_info); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RemoveGuest(int render_process_host_id, int routing_id); 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewInfoMap webview_info_map_; 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebViewPartitionIDMap webview_partition_id_map_; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(WebViewRendererState); 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIEW_RENDERER_STATE_H_ 78