• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_WEB_UI_MESSAGE_HANDLER_H_
6 #define CONTENT_PUBLIC_BROWSER_WEB_UI_MESSAGE_HANDLER_H_
7 
8 #include "base/basictypes.h"
9 #include "base/gtest_prod_util.h"
10 #include "base/strings/string16.h"
11 #include "content/common/content_export.h"
12 
13 class GURL;
14 class WebUIBrowserTest;
15 
16 namespace base {
17 class DictionaryValue;
18 class ListValue;
19 }
20 
21 namespace content {
22 
23 class WebUI;
24 class WebUIImpl;
25 
26 // Messages sent from the DOM are forwarded via the WebUI to handler
27 // classes. These objects are owned by WebUI and destroyed when the
28 // host is destroyed.
29 class CONTENT_EXPORT WebUIMessageHandler {
30  public:
WebUIMessageHandler()31   WebUIMessageHandler() : web_ui_(NULL) {}
~WebUIMessageHandler()32   virtual ~WebUIMessageHandler() {}
33 
34  protected:
35   FRIEND_TEST_ALL_PREFIXES(WebUIMessageHandlerTest, ExtractIntegerValue);
36   FRIEND_TEST_ALL_PREFIXES(WebUIMessageHandlerTest, ExtractDoubleValue);
37   FRIEND_TEST_ALL_PREFIXES(WebUIMessageHandlerTest, ExtractStringValue);
38 
39   // Helper methods:
40 
41   // Extract an integer value from a list Value.
42   static bool ExtractIntegerValue(const base::ListValue* value, int* out_int);
43 
44   // Extract a floating point (double) value from a list Value.
45   static bool ExtractDoubleValue(const base::ListValue* value,
46                                  double* out_value);
47 
48   // Extract a string value from a list Value.
49   static base::string16 ExtractStringValue(const base::ListValue* value);
50 
51   // This is where subclasses specify which messages they'd like to handle and
52   // perform any additional initialization.. At this point web_ui() will return
53   // the associated WebUI object.
54   virtual void RegisterMessages() = 0;
55 
56   // Returns the attached WebUI for this handler.
web_ui()57   WebUI* web_ui() const { return web_ui_; }
58 
59   // Sets the attached WebUI - exposed to subclasses for testing purposes.
set_web_ui(WebUI * web_ui)60   void set_web_ui(WebUI* web_ui) { web_ui_ = web_ui; }
61 
62  private:
63   // Provide external classes access to web_ui() and set_web_ui().
64   friend class WebUIImpl;
65   friend class ::WebUIBrowserTest;
66 
67   WebUI* web_ui_;
68 };
69 
70 }  // namespace content
71 
72 #endif  // CONTENT_PUBLIC_BROWSER_WEB_UI_MESSAGE_HANDLER_H_
73