Commit 737e121e authored by Wei Lee's avatar Wei Lee Committed by Chromium LUCI CQ

[CCA] Persists the devtool console state and re-open it automatically

Bug: b/174728995
Test: Manually
Change-Id: I7a572bce165c661dadf22d808840e71a54225a64
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2592571
Commit-Queue: Wei Lee <wtlee@chromium.org>
Auto-Submit: Wei Lee <wtlee@chromium.org>
Reviewed-by: default avatarShik Chen <shik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#837957}
parent 41e4a5d9
......@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/file_manager/path_util.h"
// TODO(b/174811949): Hide behind ChromeOS build flag.
#include "chrome/browser/chromeos/web_applications/chrome_camera_app_ui_constants.h"
#include "chrome/browser/devtools/devtools_window.h"
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/profiles/profile.h"
......@@ -173,3 +174,8 @@ base::FilePath ChromeCameraAppUIDelegate::GetFilePathByName(
.Append("Camera")
.Append(name_component);
}
void ChromeCameraAppUIDelegate::OpenDevToolsWindow(
content::WebContents* web_contents) {
DevToolsWindow::OpenDevToolsWindow(web_contents);
}
......@@ -74,6 +74,7 @@ class ChromeCameraAppUIDelegate : public CameraAppUIDelegate {
void OpenFileInGallery(const std::string& name) override;
void OpenFeedbackDialog(const std::string& placeholder) override;
std::string GetFilePathInArcByName(const std::string& name) override;
void OpenDevToolsWindow(content::WebContents* web_contents) override;
private:
base::FilePath GetFilePathByName(const std::string& name);
......
......@@ -13,6 +13,7 @@
#include "components/content_settings/core/common/content_settings_types.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/media_device_id.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/video_capture_service.h"
......@@ -226,9 +227,17 @@ CameraAppUI::CameraAppUI(content::WebUI* web_ui,
// Add ability to request chrome-untrusted: URLs
web_ui->AddRequestableScheme(content::kChromeUIUntrustedScheme);
if (app_window_manager()->IsDevToolsEnabled()) {
delegate_->OpenDevToolsWindow(web_ui->GetWebContents());
}
content::DevToolsAgentHost::AddObserver(this);
}
CameraAppUI::~CameraAppUI() = default;
CameraAppUI::~CameraAppUI() {
content::DevToolsAgentHost::RemoveObserver(this);
}
void CameraAppUI::BindInterface(
mojo::PendingReceiver<cros::mojom::CameraAppDeviceProvider> receiver) {
......@@ -257,6 +266,22 @@ const GURL& CameraAppUI::url() {
return web_ui()->GetWebContents()->GetURL();
}
void CameraAppUI::DevToolsAgentHostAttached(
content::DevToolsAgentHost* agent_host) {
if (agent_host->GetWebContents() != web_ui()->GetWebContents()) {
return;
}
app_window_manager()->SetDevToolsEnabled(true);
}
void CameraAppUI::DevToolsAgentHostDetached(
content::DevToolsAgentHost* agent_host) {
if (agent_host->GetWebContents() != web_ui()->GetWebContents()) {
return;
}
app_window_manager()->SetDevToolsEnabled(false);
}
WEB_UI_CONTROLLER_TYPE_IMPL(CameraAppUI)
} // namespace chromeos
......@@ -9,6 +9,7 @@
#include "chromeos/components/camera_app_ui/camera_app_helper.mojom.h"
#include "chromeos/components/camera_app_ui/camera_app_ui_delegate.h"
#include "chromeos/components/camera_app_ui/camera_app_window_manager.h"
#include "content/public/browser/devtools_agent_host_observer.h"
#include "content/public/browser/web_ui.h"
#include "media/capture/video/chromeos/mojom/camera_app.mojom.h"
#include "ui/aura/window.h"
......@@ -24,7 +25,8 @@ class CameraAppDeviceProviderImpl;
namespace chromeos {
class CameraAppUI : public ui::MojoWebUIController {
class CameraAppUI : public ui::MojoWebUIController,
public content::DevToolsAgentHostObserver {
public:
CameraAppUI(content::WebUI* web_ui,
std::unique_ptr<CameraAppUIDelegate> delegate);
......@@ -63,6 +65,12 @@ class CameraAppUI : public ui::MojoWebUIController {
const GURL& url();
// content::DevToolsAgentHostObserver overrides.
void DevToolsAgentHostAttached(
content::DevToolsAgentHost* agent_host) override;
void DevToolsAgentHostDetached(
content::DevToolsAgentHost* agent_host) override;
private:
std::unique_ptr<CameraAppUIDelegate> delegate_;
......
......@@ -8,6 +8,7 @@
#include <string>
namespace content {
class WebContents;
class WebUIDataSource;
}
......@@ -37,6 +38,9 @@ class CameraAppUIDelegate {
// Gets the file path in ARC file system by given file |name|.
virtual std::string GetFilePathInArcByName(const std::string& name) = 0;
// Opens the dev tools window.
virtual void OpenDevToolsWindow(content::WebContents* web_contents) = 0;
};
#endif // CHROMEOS_COMPONENTS_CAMERA_APP_UI_CAMERA_APP_UI_DELEGATE_H_
......@@ -43,6 +43,16 @@ void CameraAppWindowManager::SetCameraUsageMonitor(
}
}
void CameraAppWindowManager::SetDevToolsEnabled(bool enabled) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
dev_tools_enabled_ = enabled;
}
bool CameraAppWindowManager::IsDevToolsEnabled() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
return dev_tools_enabled_;
}
void CameraAppWindowManager::OnWidgetVisibilityChanged(views::Widget* widget,
bool visible) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
......
......@@ -38,6 +38,10 @@ class CameraAppWindowManager : public views::WidgetObserver {
usage_monitor,
base::OnceCallback<void()> callback);
void SetDevToolsEnabled(bool enabled);
bool IsDevToolsEnabled();
// views::WidgetObserver:
void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
......@@ -59,6 +63,9 @@ class CameraAppWindowManager : public views::WidgetObserver {
void OnResumedCameraUsage(views::Widget* prev_owner);
void ResumeNextOrIdle();
// Whether dev tools window should be opened when opening CCA window.
bool dev_tools_enabled_ = false;
base::flat_map<
views::Widget*,
mojo::Remote<chromeos_camera::mojom::CameraUsageOwnershipMonitor>>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment