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