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

Unified Diff: chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc

Issue 666533007: Move JavaScriptDialogManager, JavascriptAppModalDialogViews to components/app_modal_dialogs (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 6 years, 1 month 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
Index: chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
deleted file mode 100644
index 4b770cce29324d6e1820617d7def7ad3f401ea27..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright (c) 2012 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/app_modal_dialogs/javascript_dialog_manager.h"
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/i18n/rtl.h"
-#include "base/memory/singleton.h"
-#include "base/strings/utf_string_conversions.h"
-#include "components/app_modal_dialogs/app_modal_dialog.h"
-#include "components/app_modal_dialogs/app_modal_dialog_queue.h"
-#include "components/app_modal_dialogs/javascript_app_modal_dialog.h"
-#include "components/app_modal_dialogs/native_app_modal_dialog.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_client.h"
-#include "content/public/common/javascript_message_type.h"
-#include "grit/components_strings.h"
-#include "net/base/net_util.h"
-#include "ui/base/l10n/l10n_util.h"
-
-#if defined(ENABLE_EXTENSIONS)
-#include "extensions/browser/process_manager.h"
-#include "extensions/common/extension.h"
-#endif // defined(ENABLE_EXTENSIONS)
-
-using content::BrowserContext;
-using content::JavaScriptDialogManager;
-using content::WebContents;
-
-#if defined(ENABLE_EXTENSIONS)
-using extensions::Extension;
-#endif // defined(ENABLE_EXTENSIONS)
-
-namespace {
-
-#if defined(ENABLE_EXTENSIONS)
-// Returns the ProcessManager for the browser context from |web_contents|.
-extensions::ProcessManager* GetExtensionsProcessManager(
- WebContents* web_contents) {
- return extensions::ProcessManager::Get(web_contents->GetBrowserContext());
-}
-
-// Returns the extension associated with |web_contents| or NULL if there is no
-// associated extension (or extensions are not supported).
-const Extension* GetExtensionForWebContents(WebContents* web_contents) {
- extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents);
- return pm->GetExtensionForRenderViewHost(web_contents->GetRenderViewHost());
-}
-#endif // defined(ENABLE_EXTENSIONS)
-
-// Keeps an |extension| from shutting down its lazy background page. If an
-// extension opens a dialog its lazy background page must stay alive until the
-// dialog closes.
-void IncrementLazyKeepaliveCount(WebContents* web_contents) {
-#if defined(ENABLE_EXTENSIONS)
- const Extension* extension = GetExtensionForWebContents(web_contents);
- if (extension == NULL)
- return;
-
- DCHECK(web_contents);
- extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents);
- if (pm)
- pm->IncrementLazyKeepaliveCount(extension);
-#endif // defined(ENABLE_EXTENSIONS)
-}
-
-// Allows an |extension| to shut down its lazy background page after a dialog
-// closes (if nothing else is keeping it open).
-void DecrementLazyKeepaliveCount(WebContents* web_contents) {
-#if defined(ENABLE_EXTENSIONS)
- const Extension* extension = GetExtensionForWebContents(web_contents);
- if (extension == NULL)
- return;
-
- DCHECK(web_contents);
- extensions::ProcessManager* pm = GetExtensionsProcessManager(web_contents);
- if (pm)
- pm->DecrementLazyKeepaliveCount(extension);
-#endif // defined(ENABLE_EXTENSIONS)
-}
-
-class ChromeJavaScriptDialogManager : public JavaScriptDialogManager {
- public:
- static ChromeJavaScriptDialogManager* GetInstance();
-
- void RunJavaScriptDialog(WebContents* web_contents,
- const GURL& origin_url,
- const std::string& accept_lang,
- content::JavaScriptMessageType message_type,
- const base::string16& message_text,
- const base::string16& default_prompt_text,
- const DialogClosedCallback& callback,
- bool* did_suppress_message) override;
-
- void RunBeforeUnloadDialog(WebContents* web_contents,
- const base::string16& message_text,
- bool is_reload,
- const DialogClosedCallback& callback) override;
-
- bool HandleJavaScriptDialog(WebContents* web_contents,
- bool accept,
- const base::string16* prompt_override) override;
-
- void CancelActiveAndPendingDialogs(WebContents* web_contents) override;
-
- void WebContentsDestroyed(WebContents* web_contents) override;
-
- private:
- friend struct DefaultSingletonTraits<ChromeJavaScriptDialogManager>;
-
- ChromeJavaScriptDialogManager();
- ~ChromeJavaScriptDialogManager() override;
-
- base::string16 GetTitle(WebContents* web_contents,
- const GURL& origin_url,
- const std::string& accept_lang,
- bool is_alert);
-
- // Wrapper around a DialogClosedCallback so that we can intercept it before
- // passing it onto the original callback.
- void OnDialogClosed(WebContents* web_contents,
- DialogClosedCallback callback,
- bool success,
- const base::string16& user_input);
-
- // Mapping between the WebContents and their extra data. The key
- // is a void* because the pointer is just a cookie and is never dereferenced.
- JavaScriptAppModalDialog::ExtraDataMap javascript_dialog_extra_data_;
-
- DISALLOW_COPY_AND_ASSIGN(ChromeJavaScriptDialogManager);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// ChromeJavaScriptDialogManager, public:
-
-ChromeJavaScriptDialogManager::ChromeJavaScriptDialogManager() {
-}
-
-ChromeJavaScriptDialogManager::~ChromeJavaScriptDialogManager() {
-}
-
-// static
-ChromeJavaScriptDialogManager* ChromeJavaScriptDialogManager::GetInstance() {
- return Singleton<ChromeJavaScriptDialogManager>::get();
-}
-
-void ChromeJavaScriptDialogManager::RunJavaScriptDialog(
- WebContents* web_contents,
- const GURL& origin_url,
- const std::string& accept_lang,
- content::JavaScriptMessageType message_type,
- const base::string16& message_text,
- const base::string16& default_prompt_text,
- const DialogClosedCallback& callback,
- bool* did_suppress_message) {
- *did_suppress_message = false;
-
- ChromeJavaScriptDialogExtraData* extra_data =
- &javascript_dialog_extra_data_[web_contents];
-
- if (extra_data->suppress_javascript_messages_) {
- *did_suppress_message = true;
- return;
- }
-
- base::TimeDelta time_since_last_message = base::TimeTicks::Now() -
- extra_data->last_javascript_message_dismissal_;
- bool display_suppress_checkbox = false;
- // If a WebContents is impolite and displays a second JavaScript
- // alert within kJavaScriptMessageExpectedDelay of a previous
- // JavaScript alert being dismissed, show a checkbox offering to
- // suppress future alerts from this WebContents.
- const int kJavaScriptMessageExpectedDelay = 1000;
-
- if (time_since_last_message <
- base::TimeDelta::FromMilliseconds(kJavaScriptMessageExpectedDelay)) {
- display_suppress_checkbox = true;
- } else {
- display_suppress_checkbox = false;
- }
-
- bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT;
- base::string16 dialog_title =
- GetTitle(web_contents, origin_url, accept_lang, is_alert);
-
- IncrementLazyKeepaliveCount(web_contents);
-
- AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog(
- web_contents,
- &javascript_dialog_extra_data_,
- dialog_title,
- message_type,
- message_text,
- default_prompt_text,
- display_suppress_checkbox,
- false, // is_before_unload_dialog
- false, // is_reload
- base::Bind(&ChromeJavaScriptDialogManager::OnDialogClosed,
- base::Unretained(this), web_contents, callback)));
-}
-
-void ChromeJavaScriptDialogManager::RunBeforeUnloadDialog(
- WebContents* web_contents,
- const base::string16& message_text,
- bool is_reload,
- const DialogClosedCallback& callback) {
- const base::string16 title = l10n_util::GetStringUTF16(is_reload ?
- IDS_BEFORERELOAD_MESSAGEBOX_TITLE : IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE);
- const base::string16 footer = l10n_util::GetStringUTF16(is_reload ?
- IDS_BEFORERELOAD_MESSAGEBOX_FOOTER : IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER);
-
- base::string16 full_message =
- message_text + base::ASCIIToUTF16("\n\n") + footer;
-
- IncrementLazyKeepaliveCount(web_contents);
-
- AppModalDialogQueue::GetInstance()->AddDialog(new JavaScriptAppModalDialog(
- web_contents,
- &javascript_dialog_extra_data_,
- title,
- content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM,
- full_message,
- base::string16(), // default_prompt_text
- false, // display_suppress_checkbox
- true, // is_before_unload_dialog
- is_reload,
- base::Bind(&ChromeJavaScriptDialogManager::OnDialogClosed,
- base::Unretained(this), web_contents, callback)));
-}
-
-bool ChromeJavaScriptDialogManager::HandleJavaScriptDialog(
- WebContents* web_contents,
- bool accept,
- const base::string16* prompt_override) {
- AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance();
- if (!dialog_queue->HasActiveDialog() ||
- !dialog_queue->active_dialog()->IsJavaScriptModalDialog() ||
- dialog_queue->active_dialog()->web_contents() != web_contents) {
- return false;
- }
- JavaScriptAppModalDialog* dialog = static_cast<JavaScriptAppModalDialog*>(
- dialog_queue->active_dialog());
- if (accept) {
- if (prompt_override)
- dialog->SetOverridePromptText(*prompt_override);
- dialog->native_dialog()->AcceptAppModalDialog();
- } else {
- dialog->native_dialog()->CancelAppModalDialog();
- }
- return true;
-}
-
-void ChromeJavaScriptDialogManager::WebContentsDestroyed(
- WebContents* web_contents) {
- CancelActiveAndPendingDialogs(web_contents);
- javascript_dialog_extra_data_.erase(web_contents);
-}
-
-base::string16 ChromeJavaScriptDialogManager::GetTitle(
- WebContents* web_contents,
- const GURL& origin_url,
- const std::string& accept_lang,
- bool is_alert) {
- // If the URL hasn't any host, return the default string.
- if (!origin_url.has_host()) {
- return l10n_util::GetStringUTF16(
- is_alert ? IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE
- : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE);
- }
-
- // For extensions, show the extension name, but only if the origin of
- // the alert matches the top-level WebContents.
-#if defined(ENABLE_EXTENSIONS)
- const Extension* extension = GetExtensionForWebContents(web_contents);
- if (extension &&
- web_contents->GetLastCommittedURL().GetOrigin() == origin_url) {
- return base::UTF8ToUTF16(extension->name());
- }
-#endif // defined(ENABLE_EXTENSIONS)
-
- // Otherwise, return the formatted URL.
- // In this case, force URL to have LTR directionality.
- base::string16 url_string = net::FormatUrl(origin_url, accept_lang);
- return l10n_util::GetStringFUTF16(
- is_alert ? IDS_JAVASCRIPT_ALERT_TITLE
- : IDS_JAVASCRIPT_MESSAGEBOX_TITLE,
- base::i18n::GetDisplayStringInLTRDirectionality(url_string));
-}
-
-void ChromeJavaScriptDialogManager::CancelActiveAndPendingDialogs(
- WebContents* web_contents) {
- AppModalDialogQueue* queue = AppModalDialogQueue::GetInstance();
- AppModalDialog* active_dialog = queue->active_dialog();
- if (active_dialog && active_dialog->web_contents() == web_contents)
- active_dialog->Invalidate();
- for (AppModalDialogQueue::iterator i = queue->begin();
- i != queue->end(); ++i) {
- if ((*i)->web_contents() == web_contents)
- (*i)->Invalidate();
- }
-}
-
-void ChromeJavaScriptDialogManager::OnDialogClosed(
- WebContents* web_contents,
- DialogClosedCallback callback,
- bool success,
- const base::string16& user_input) {
- // If an extension opened this dialog then the extension may shut down its
- // lazy background page after the dialog closes. (Dialogs are closed before
- // their WebContents is destroyed so |web_contents| is still valid here.)
- DecrementLazyKeepaliveCount(web_contents);
-
- callback.Run(success, user_input);
-}
-
-} // namespace
-
-content::JavaScriptDialogManager* GetJavaScriptDialogManagerInstance() {
- return ChromeJavaScriptDialogManager::GetInstance();
-}

Powered by Google App Engine
This is Rietveld 408576698