1b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// Use of this source code is governed by a BSD-style license that can be
3b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// found in the LICENSE file.
4b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
5b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#ifndef CONTENT_PUBLIC_BROWSER_WEB_UI_CONTROLLER_H_
6b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#define CONTENT_PUBLIC_BROWSER_WEB_UI_CONTROLLER_H_
7b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
8b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "base/basictypes.h"
9b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "base/strings/string16.h"
10b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn#include "content/common/content_export.h"
11b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
12b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass GURL;
13b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
14b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornnamespace base {
15b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass ListValue;
16b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn}
17b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
18b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornnamespace content {
19b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
20b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass RenderViewHost;
21b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass WebUI;
22b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
23b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// A WebUI page is controller by the embedder's WebUIController object. It
24b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn// manages the data source and message handlers.
25b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackbornclass CONTENT_EXPORT WebUIController {
26b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn public:
27b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  explicit WebUIController(WebUI* web_ui) : web_ui_(web_ui) {}
28b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual ~WebUIController() {}
29b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
30b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // Allows the controller to override handling all messages from the page.
31b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // Return true if the message handling was overridden.
32b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual bool OverrideHandleWebUIMessage(const GURL& source_url,
33b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn                                          const std::string& message,
34b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn                                          const base::ListValue& args);
35b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
36b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // Called when RenderView is first created. This is *not* called for every
37b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // page load because in some cases a RenderView will be reused. In those
38b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // cases, RenderViewReused will be called instead.
39b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual void RenderViewCreated(RenderViewHost* render_view_host) {}
40b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
41b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  // Called when a RenderView is reused to display a page.
42b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  virtual void RenderViewReused(RenderViewHost* render_view_host) {}
43b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
44b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn  WebUI* web_ui() const { return web_ui_; }
45b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
46b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor private:
4760d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor  WebUI* web_ui_;
48b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor};
49b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn
50b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn}  // namespace content
51287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn
52287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn#endif  // CONTENT_PUBLIC_BROWSER_WEB_UI_CONTROLLER_H_
53287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn