diff options
author | glen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-07 23:48:03 +0000 |
---|---|---|
committer | glen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-07 23:48:03 +0000 |
commit | 76a010b47593d41d1d443dacc51bc906689c2e53 (patch) | |
tree | 28f61efd20f447d21bb5ca3e8582b29994c79eba /chrome/browser/dom_ui/dom_ui.h | |
parent | 85ad84eba6540630a33ab7bfa37c2d37c4a9554d (diff) | |
download | chromium_src-76a010b47593d41d1d443dacc51bc906689c2e53.zip chromium_src-76a010b47593d41d1d443dacc51bc906689c2e53.tar.gz chromium_src-76a010b47593d41d1d443dacc51bc906689c2e53.tar.bz2 |
Reupload of 12418
Review URL: http://codereview.chromium.org/13183
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6497 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui/dom_ui.h')
-rw-r--r-- | chrome/browser/dom_ui/dom_ui.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/chrome/browser/dom_ui/dom_ui.h b/chrome/browser/dom_ui/dom_ui.h new file mode 100644 index 0000000..7b0b446 --- /dev/null +++ b/chrome/browser/dom_ui/dom_ui.h @@ -0,0 +1,86 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_DOM_UI_H__ +#define CHROME_BROWSER_DOM_UI_H__ + +#include "base/task.h" +#include "chrome/browser/dom_ui/dom_ui_contents.h" + +class Value; +class DOMMessageHandler; + +// A DOMUI sets up the datasources and message handlers for a given HTML-based +// UI. It is contained by a DOMUIContents. +class DOMUI { + public: + DOMUI(DOMUIContents* contents); + + virtual ~DOMUI(); + virtual void Init() = 0; + + // Called from DOMUIContents. + void ProcessDOMUIMessage(const std::string& message, + const std::string& content); + + // Used by DOMMessageHandlers. + typedef Callback1<const Value*>::Type MessageCallback; + void RegisterMessageCallback (const std::string& message, + MessageCallback* callback); + + // Call a Javascript function by sending its name and arguments down to + // the renderer. This is asynchronous; there's no way to get the result + // of the call, and should be thought of more like sending a message to + // the page. + // There are two function variants for one-arg and two-arg calls. + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg); + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg1, + const Value& arg2); + + Profile* get_profile() { return contents_->profile(); } + + protected: + void AddMessageHandler(DOMMessageHandler* handler); + + DOMUIContents* contents_; + + private: + // Execute a string of raw Javascript on the page. + void ExecuteJavascript(const std::wstring& javascript); + + // The DOMMessageHandlers we own. + std::vector<DOMMessageHandler*> handlers_; + + // A map of message name -> message handling callback. + typedef std::map<std::string, MessageCallback*> MessageCallbackMap; + MessageCallbackMap message_callbacks_; + + DISALLOW_COPY_AND_ASSIGN(DOMUI); +}; + +// Messages sent from the DOM are forwarded via the DOMUIContents to handler +// classes. These objects are owned by DOMUIHost and destroyed when the +// host is destroyed. +class DOMMessageHandler { + public: + explicit DOMMessageHandler(DOMUI* dom_ui); + virtual ~DOMMessageHandler(); + + protected: + // Adds "url" and "title" keys on incoming dictionary, setting title + // as the url as a fallback on empty title. + static void SetURLAndTitle(DictionaryValue* dictionary, + std::wstring title, + const GURL& gurl); + + DOMUI* const dom_ui_; + + private: + DISALLOW_COPY_AND_ASSIGN(DOMMessageHandler); +}; + + +#endif // CHROME_BROWSER_DOM_UI_H__
\ No newline at end of file |