Add the beginnings for webui page chrome://tracking2.
This is intended to supercede about:tracking. It will implement the same functionality but with a richer javascript-based UI.
BUG=100992
Review URL: http://codereview.chromium.org/8352037
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106597 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index e0c1e754..0a7b823 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -106,6 +106,8 @@
<include name="IDR_CLOUD_PRINT_SETUP_DONE_HTML" file="printing\cloud_print\resources\cloud_print_setup_done.html" flattenhtml="true" type="BINDATA" />
<include name="IDR_TRACING_HTML" file="resources\tracing.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
<include name="IDR_TRACING_JS" file="resources\tracing.js" flattenhtml="true" type="BINDATA" />
+ <include name="IDR_TRACKING_HTML" file="resources\tracking.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+ <include name="IDR_TRACKING_JS" file="resources\tracking.js" flattenhtml="true" type="BINDATA" />
<include name="IDR_TRANSLATE_JS" file="resources\translate.js" type="BINDATA" />
<include name="IDR_BUGREPORT_HTML" file="resources\bug_report.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
<include name="IDR_BUGREPORT_HTML_INVALID" file="resources\bug_report_invalid.html" allowexternalscript="true" flattenhtml="true" type="BINDATA" />
diff --git a/chrome/browser/resources/tracking.html b/chrome/browser/resources/tracking.html
new file mode 100644
index 0000000..0ebae79
--- /dev/null
+++ b/chrome/browser/resources/tracking.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="tracking.js"></script>
+</head>
+<body>
+ This page is under construction!
+</body>
+</html>
diff --git a/chrome/browser/resources/tracking.js b/chrome/browser/resources/tracking.js
new file mode 100644
index 0000000..59ab9e5e
--- /dev/null
+++ b/chrome/browser/resources/tracking.js
@@ -0,0 +1,80 @@
+// Copyright (c) 2011 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.
+
+var g_browserBridge;
+var g_mainView;
+
+/**
+ * Main entry point called once the page has loaded.
+ */
+function onLoad() {
+ g_browserBridge = new BrowserBridge();
+ g_mainView = new MainView();
+
+ // Ask the browser to send us the current data.
+ g_browserBridge.sendGetData();
+}
+
+document.addEventListener('DOMContentLoaded', onLoad);
+
+/**
+ * This class provides a "bridge" for communicating between the javascript and
+ * the browser. Used as a singleton.
+ */
+var BrowserBridge = (function() {
+ 'use strict';
+
+ /**
+ * @constructor
+ */
+ function BrowserBridge() {
+ }
+
+ BrowserBridge.prototype = {
+ //--------------------------------------------------------------------------
+ // Messages sent to the browser
+ //--------------------------------------------------------------------------
+
+ sendGetData: function() {
+ chrome.send('getData');
+ },
+
+ sendResetData: function() {
+ chrome.send('resetData');
+ },
+
+ //--------------------------------------------------------------------------
+ // Messages received from the browser.
+ //--------------------------------------------------------------------------
+
+ receivedData: function(data) {
+ g_mainView.setData(data);
+ },
+ };
+
+ return BrowserBridge;
+})();
+
+/**
+ * This class handles the presentation of our tracking view. Used as a
+ * singleton.
+ */
+var MainView = (function() {
+ 'use strict';
+
+ /**
+ * @constructor
+ */
+ function MainView() {
+ }
+
+ MainView.prototype = {
+ setData: function(data) {
+ // TODO(eroman): IMPLEMENT.
+ alert('data received');
+ },
+ };
+
+ return MainView;
+})();
diff --git a/chrome/browser/ui/webui/chrome_web_ui_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_factory.cc
index 445bb038..0b172c4 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_factory.cc
@@ -38,6 +38,7 @@
#include "chrome/browser/ui/webui/sync_internals_ui.h"
#include "chrome/browser/ui/webui/test_chrome_web_ui_factory.h"
#include "chrome/browser/ui/webui/tracing_ui.h"
+#include "chrome/browser/ui/webui/tracking_ui.h"
#include "chrome/browser/ui/webui/workers_ui.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension_constants.h"
@@ -203,6 +204,8 @@
return &NewWebUI<OptionsUI>;
if (url.host() == chrome::kChromeUITracingHost)
return &NewWebUI<TracingUI>;
+ if (url.host() == chrome::kChromeUITrackingHost2)
+ return &NewWebUI<TrackingUI>;
if (url.host() == chrome::kChromeUIQuotaInternalsHost)
return &NewWebUI<QuotaInternalsUI>;
if (url.host() == chrome::kChromeUIWorkersHost)
diff --git a/chrome/browser/ui/webui/tracking_ui.cc b/chrome/browser/ui/webui/tracking_ui.cc
new file mode 100644
index 0000000..76bb088
--- /dev/null
+++ b/chrome/browser/ui/webui/tracking_ui.cc
@@ -0,0 +1,88 @@
+// Copyright (c) 2011 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.
+
+#include "chrome/browser/ui/webui/tracking_ui.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/tracked_objects.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
+#include "chrome/common/url_constants.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/browser/trace_controller.h"
+#include "grit/browser_resources.h"
+#include "grit/generated_resources.h"
+
+namespace {
+
+ChromeWebUIDataSource* CreateTrackingHTMLSource() {
+ // TODO(eroman): Use kChromeUITrackingHost instead of kChromeUITrackingHost2
+ // once migration to webui is complete.
+ ChromeWebUIDataSource* source =
+ new ChromeWebUIDataSource(chrome::kChromeUITrackingHost2);
+
+ source->set_json_path("strings.js");
+ source->add_resource_path("tracking.js", IDR_TRACKING_JS);
+ source->set_default_resource(IDR_TRACKING_HTML);
+ return source;
+}
+
+// This class receives javascript messages from the renderer.
+// Note that the WebUI infrastructure runs on the UI thread, therefore all of
+// this class's methods are expected to run on the UI thread.
+class TrackingMessageHandler : public WebUIMessageHandler {
+ public:
+ TrackingMessageHandler() {}
+
+ // WebUIMessageHandler implementation.
+ virtual WebUIMessageHandler* Attach(WebUI* web_ui) OVERRIDE;
+ virtual void RegisterMessages() OVERRIDE;
+
+ // Messages.
+ void OnGetData(const ListValue* list);
+ void OnResetData(const ListValue* list);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TrackingMessageHandler);
+};
+
+WebUIMessageHandler* TrackingMessageHandler::Attach(WebUI* web_ui) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ WebUIMessageHandler* result = WebUIMessageHandler::Attach(web_ui);
+ return result;
+}
+
+void TrackingMessageHandler::RegisterMessages() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ web_ui_->RegisterMessageCallback("getData",
+ base::Bind(&TrackingMessageHandler::OnGetData,base::Unretained(this)));
+ web_ui_->RegisterMessageCallback("resetData",
+ base::Bind(&TrackingMessageHandler::OnResetData,
+ base::Unretained(this)));
+}
+
+void TrackingMessageHandler::OnGetData(const ListValue* list) {
+ // TODO(eroman): Gather all the task tracking information into a Value.
+ ListValue values;
+
+ // Send the data to the renderer.
+ web_ui_->CallJavascriptFunction("g_browserBridge.receivedData", values);
+}
+
+void TrackingMessageHandler::OnResetData(const ListValue* list) {
+ tracked_objects::ThreadData::ResetAllThreadData();
+}
+
+} // namespace
+
+TrackingUI::TrackingUI(TabContents* contents) : ChromeWebUI(contents) {
+ AddMessageHandler((new TrackingMessageHandler())->Attach(this));
+
+ // Set up the chrome://tracking2/ source.
+ Profile::FromBrowserContext(contents->browser_context())->
+ GetChromeURLDataManager()->AddDataSource(CreateTrackingHTMLSource());
+}
diff --git a/chrome/browser/ui/webui/tracking_ui.h b/chrome/browser/ui/webui/tracking_ui.h
new file mode 100644
index 0000000..de62ae2
--- /dev/null
+++ b/chrome/browser/ui/webui/tracking_ui.h
@@ -0,0 +1,20 @@
+// Copyright (c) 2011 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_UI_WEBUI_TRACKING_UI_H_
+#define CHROME_BROWSER_UI_WEBUI_TRACKING_UI_H_
+#pragma once
+
+#include "chrome/browser/ui/webui/chrome_web_ui.h"
+
+// The C++ back-end for the chrome://tracking2 webui page.
+class TrackingUI : public ChromeWebUI {
+ public:
+ explicit TrackingUI(TabContents* contents);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TrackingUI);
+};
+
+#endif // CHROME_BROWSER_UI_WEBUI_TRACKING_UI_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 17385f2e..30eb7466 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -3880,6 +3880,8 @@
'browser/ui/webui/theme_source.h',
'browser/ui/webui/tracing_ui.cc',
'browser/ui/webui/tracing_ui.h',
+ 'browser/ui/webui/tracking_ui.cc',
+ 'browser/ui/webui/tracking_ui.h',
'browser/ui/webui/web_ui_util.cc',
'browser/ui/webui/web_ui_util.h',
'browser/ui/webui/workers_ui.cc',
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
index cdfb3c7d..4012895f 100644
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -174,6 +174,7 @@
const char kChromeUITouchIconHost[] = "touch-icon";
const char kChromeUITracingHost[] = "tracing";
const char kChromeUITrackingHost[] = "tracking";
+const char kChromeUITrackingHost2[] = "tracking2";
const char kChromeUIVersionHost[] = "version";
const char kChromeUIWorkersHost[] = "workers";
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h
index da9e9f42..42b713b 100644
--- a/chrome/common/url_constants.h
+++ b/chrome/common/url_constants.h
@@ -165,6 +165,7 @@
extern const char kChromeUITouchIconHost[];
extern const char kChromeUITracingHost[];
extern const char kChromeUITrackingHost[];
+extern const char kChromeUITrackingHost2[];
extern const char kChromeUIVersionHost[];
extern const char kChromeUIWorkersHost[];