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 CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
6#define CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
7
8#include <string>
9
10#include "base/callback.h"
11#include "content/common/content_export.h"
12
13class GURL;
14
15namespace base {
16class DictionaryValue;
17}  // namespace base
18
19namespace content {
20
21class SiteInstance;
22class WebContents;
23
24// A BrowserPluginGuestManager offloads guest management and routing
25// operations outside of the content layer.
26class CONTENT_EXPORT BrowserPluginGuestManager {
27 public:
28  virtual ~BrowserPluginGuestManager() {}
29
30  // Requests the allocation of a new guest WebContents.
31  virtual content::WebContents* CreateGuest(
32      content::SiteInstance* embedder_site_instance,
33      int instance_id,
34      scoped_ptr<base::DictionaryValue> extra_params);
35
36  // Return a new instance ID.
37  // TODO(fsamuel): Remove this. Once the instance ID concept is moved
38  // entirely out of content and into chrome, this API will be unnecessary.
39  virtual int GetNextInstanceID();
40
41  typedef base::Callback<void(WebContents*)> GuestByInstanceIDCallback;
42  // Requests a guest WebContents associated with the provided
43  // |guest_instance_id|. If a guest associated with the provided ID
44  // does not exist, then the |callback| will be called with a NULL
45  // WebContents. If the provided |embedder_render_process_id| does
46  // not own the requested guest, then the embedder will be killed,
47  // and the |callback| will not be called.
48  virtual void MaybeGetGuestByInstanceIDOrKill(
49      int guest_instance_id,
50      int embedder_render_process_id,
51      const GuestByInstanceIDCallback& callback) {}
52
53  // Iterates over all WebContents belonging to a given |embedder_web_contents|,
54  // calling |callback| for each. If one of the callbacks returns true, then
55  // the iteration exits early.
56  typedef base::Callback<bool(WebContents*)> GuestCallback;
57  virtual bool ForEachGuest(WebContents* embedder_web_contents,
58                            const GuestCallback& callback);
59};
60
61}  // namespace content
62
63#endif  // CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
64