// 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 "android_webview/browser/aw_javascript_dialog_manager.h" #include #include "android_webview/browser/aw_contents_client_bridge.h" #include "content/public/browser/javascript_dialog_manager.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" namespace android_webview { AwJavaScriptDialogManager::AwJavaScriptDialogManager() {} AwJavaScriptDialogManager::~AwJavaScriptDialogManager() {} void AwJavaScriptDialogManager::RunJavaScriptDialog( content::WebContents* web_contents, content::RenderFrameHost* render_frame_host, content::JavaScriptDialogType dialog_type, const std::u16string& message_text, const std::u16string& default_prompt_text, DialogClosedCallback callback, bool* did_suppress_message) { AwContentsClientBridge* bridge = AwContentsClientBridge::FromWebContents(web_contents); if (!bridge) { std::move(callback).Run(false, std::u16string()); return; } // Non-WebView versions of Chrome use the frame's last committed origin for // dialog attribution (crbug.com/1241497). However, WebView exposes JS dialog // calls to users, which means that a change to using the origin (exposed as // a URL) would be app-visible and a potential compatibility issue. // // In addition, WebView is special in that the "last committed origin" and the // origin of the "last committed URL" can be different due to a legacy app- // exposed setting, so such a change might be even more breaking. // // TODO(crbug.com/1241925): Figure out if some kind of migration can be done // here, as this is one of several instances in which moving from URL to // origin would be desirable. // // References: // https://chromium-review.googlesource.com/c/chromium/src/+/2944834/27..46/android_webview/browser/aw_permission_manager.cc#b599 // https://chromium-review.googlesource.com/c/chromium/src/+/3107569/5/android_webview/browser/aw_javascript_dialog_manager.cc#41 bridge->RunJavaScriptDialog( dialog_type, render_frame_host->GetLastCommittedURL(), message_text, default_prompt_text, std::move(callback)); } void AwJavaScriptDialogManager::RunBeforeUnloadDialog( content::WebContents* web_contents, content::RenderFrameHost* render_frame_host, bool is_reload, DialogClosedCallback callback) { AwContentsClientBridge* bridge = AwContentsClientBridge::FromWebContents(web_contents); if (!bridge) { std::move(callback).Run(false, std::u16string()); return; } bridge->RunBeforeUnloadDialog(web_contents->GetURL(), std::move(callback)); } void AwJavaScriptDialogManager::CancelDialogs( content::WebContents* web_contents, bool reset_state) {} } // namespace android_webview