Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6089)

Unified Diff: chrome/browser/ui/webui/repost_form_warning_ui.cc

Issue 7828065: chromeos: Add WebUI implementation of form repost dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge. again. Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/repost_form_warning_ui.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/repost_form_warning_ui.cc
diff --git a/chrome/browser/ui/webui/repost_form_warning_ui.cc b/chrome/browser/ui/webui/repost_form_warning_ui.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2b94d652343f55d9d92255c12e97f6eb4a1f9f83
--- /dev/null
+++ b/chrome/browser/ui/webui/repost_form_warning_ui.cc
@@ -0,0 +1,160 @@
+// 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/repost_form_warning_ui.h"
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/json/json_reader.h"
+#include "base/string_piece.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/repost_form_warning_controller.h"
+#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
+#include "chrome/browser/ui/webui/constrained_html_ui.h"
+#include "chrome/browser/ui/webui/html_dialog_ui.h"
+#include "chrome/common/jstemplate_builder.h"
+#include "chrome/common/url_constants.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "grit/browser_resources.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/size.h"
+
+using std::string;
+
+namespace browser {
+
+// Declared in browser_dialogs.h so others don't have to depend on our header.
+void ShowRepostFormWarningDialog(gfx::NativeWindow parent_window,
+ TabContents* tab_contents) {
+ new RepostFormWarningUI(parent_window, tab_contents);
+}
+
+} // namespace browser
+
+class RepostFormWarningSource : public ChromeURLDataManager::DataSource {
+ public:
+ RepostFormWarningSource()
+ : DataSource(chrome::kChromeUIRepostFormWarningHost,
+ MessageLoop::current()) {
+ }
+
+ virtual void StartDataRequest(const std::string& path,
+ bool is_off_the_record,
+ int request_id) OVERRIDE {
+ DictionaryValue dict;
+ dict.SetString("explanation",
+ l10n_util::GetStringUTF16(IDS_HTTP_POST_WARNING));
+ dict.SetString("resend",
+ l10n_util::GetStringUTF16(IDS_HTTP_POST_WARNING_RESEND));
+ dict.SetString("cancel", l10n_util::GetStringUTF16(IDS_CANCEL));
+
+ SetFontAndTextDirection(&dict);
+ base::StringPiece html =
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_REPOST_FORM_WARNING_HTML);
+ string response = jstemplate_builder::GetI18nTemplateHtml(html, &dict);
+ SendResponse(request_id, base::RefCountedString::TakeString(&response));
+ }
+
+ virtual string GetMimeType(const std::string& path) const OVERRIDE {
+ return "text/html";
+ }
+
+ static void RegisterDataSource(Profile* profile) {
+ ChromeURLDataManager* url_manager = profile->GetChromeURLDataManager();
+ url_manager->AddDataSource(new RepostFormWarningSource());
+ }
+
+ private:
+ virtual ~RepostFormWarningSource() {}
+
+ DISALLOW_COPY_AND_ASSIGN(RepostFormWarningSource);
+};
+
+class RepostFormWarningHtmlDelegate : public HtmlDialogUIDelegate {
+ public:
+ explicit RepostFormWarningHtmlDelegate(RepostFormWarningUI* ui) : ui_(ui) {}
+
+ virtual ~RepostFormWarningHtmlDelegate() {}
+
+ // HtmlDialogUIDelegate implementation.
+ virtual bool IsDialogModal() const OVERRIDE {
+ return true;
+ }
+
+ virtual string16 GetDialogTitle() const OVERRIDE {
+ return l10n_util::GetStringUTF16(IDS_HTTP_POST_WARNING_TITLE);
+ }
+
+ virtual GURL GetDialogContentURL() const OVERRIDE {
+ return GURL(chrome::kChromeUIRepostFormWarningURL);
+ }
+
+ virtual void GetWebUIMessageHandlers(
+ std::vector<WebUIMessageHandler*>* handlers) const OVERRIDE {}
+
+ virtual void GetDialogSize(gfx::Size* size) const OVERRIDE {
+ size->SetSize(kDialogWidth, kDialogHeight);
+ }
+
+ virtual std::string GetDialogArgs() const OVERRIDE {
+ return string();
+ }
+
+ virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE {
+ bool repost = false;
+ if (!json_retval.empty()) {
+ base::JSONReader reader;
+ scoped_ptr<Value> value(reader.JsonToValue(json_retval, false, false));
+ if (!value.get() || !value->GetAsBoolean(&repost))
+ NOTREACHED() << "Missing or unreadable response from dialog";
+ }
+
+ ui_->OnDialogClosed(repost);
+ ui_ = NULL;
+ delete this;
+ }
+
+ virtual void OnCloseContents(TabContents* source,
+ bool* out_close_dialog) OVERRIDE {}
+
+ virtual bool ShouldShowDialogTitle() const OVERRIDE {
+ return true;
+ }
+
+ private:
+ static const int kDialogWidth = 400;
+ static const int kDialogHeight = 108;
+
+ RepostFormWarningUI* ui_; // not owned
+
+ DISALLOW_COPY_AND_ASSIGN(RepostFormWarningHtmlDelegate);
+};
+
+RepostFormWarningUI::RepostFormWarningUI(gfx::NativeWindow parent_window,
+ TabContents* tab_contents)
+ : controller_(new RepostFormWarningController(tab_contents)) {
+ Profile* profile =
+ Profile::FromBrowserContext(tab_contents->browser_context());
+ RepostFormWarningSource::RegisterDataSource(profile);
+ RepostFormWarningHtmlDelegate* delegate =
+ new RepostFormWarningHtmlDelegate(this);
+ ConstrainedHtmlUI::CreateConstrainedHtmlDialog(
+ profile, delegate, tab_contents);
+}
+
+RepostFormWarningUI::~RepostFormWarningUI() {}
+
+void RepostFormWarningUI::OnDialogClosed(bool repost) {
+ if (repost)
+ controller_->Continue();
+ else
+ controller_->Cancel();
+ delete this;
+}
« no previous file with comments | « chrome/browser/ui/webui/repost_form_warning_ui.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698