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 @@ ...@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/file_manager/path_util.h" #include "chrome/browser/chromeos/file_manager/path_util.h"
// TODO(b/174811949): Hide behind ChromeOS build flag. // TODO(b/174811949): Hide behind ChromeOS build flag.
#include "chrome/browser/chromeos/web_applications/chrome_camera_app_ui_constants.h" #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/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -173,3 +174,8 @@ base::FilePath ChromeCameraAppUIDelegate::GetFilePathByName( ...@@ -173,3 +174,8 @@ base::FilePath ChromeCameraAppUIDelegate::GetFilePathByName(
.Append("Camera") .Append("Camera")
.Append(name_component); .Append(name_component);
} }
void ChromeCameraAppUIDelegate::OpenDevToolsWindow(
content::WebContents* web_contents) {
DevToolsWindow::OpenDevToolsWindow(web_contents);
}
...@@ -74,6 +74,7 @@ class ChromeCameraAppUIDelegate : public CameraAppUIDelegate { ...@@ -74,6 +74,7 @@ class ChromeCameraAppUIDelegate : public CameraAppUIDelegate {
void OpenFileInGallery(const std::string& name) override; void OpenFileInGallery(const std::string& name) override;
void OpenFeedbackDialog(const std::string& placeholder) override; void OpenFeedbackDialog(const std::string& placeholder) override;
std::string GetFilePathInArcByName(const std::string& name) override; std::string GetFilePathInArcByName(const std::string& name) override;
void OpenDevToolsWindow(content::WebContents* web_contents) override;
private: private:
base::FilePath GetFilePathByName(const std::string& name); base::FilePath GetFilePathByName(const std::string& name);
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_types.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.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/media_device_id.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/video_capture_service.h" #include "content/public/browser/video_capture_service.h"
...@@ -226,9 +227,17 @@ CameraAppUI::CameraAppUI(content::WebUI* web_ui, ...@@ -226,9 +227,17 @@ CameraAppUI::CameraAppUI(content::WebUI* web_ui,
// Add ability to request chrome-untrusted: URLs // Add ability to request chrome-untrusted: URLs
web_ui->AddRequestableScheme(content::kChromeUIUntrustedScheme); 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( void CameraAppUI::BindInterface(
mojo::PendingReceiver<cros::mojom::CameraAppDeviceProvider> receiver) { mojo::PendingReceiver<cros::mojom::CameraAppDeviceProvider> receiver) {
...@@ -257,6 +266,22 @@ const GURL& CameraAppUI::url() { ...@@ -257,6 +266,22 @@ const GURL& CameraAppUI::url() {
return web_ui()->GetWebContents()->GetURL(); 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) WEB_UI_CONTROLLER_TYPE_IMPL(CameraAppUI)
} // namespace chromeos } // namespace chromeos
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "chromeos/components/camera_app_ui/camera_app_helper.mojom.h" #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_ui_delegate.h"
#include "chromeos/components/camera_app_ui/camera_app_window_manager.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 "content/public/browser/web_ui.h"
#include "media/capture/video/chromeos/mojom/camera_app.mojom.h" #include "media/capture/video/chromeos/mojom/camera_app.mojom.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
...@@ -24,7 +25,8 @@ class CameraAppDeviceProviderImpl; ...@@ -24,7 +25,8 @@ class CameraAppDeviceProviderImpl;
namespace chromeos { namespace chromeos {
class CameraAppUI : public ui::MojoWebUIController { class CameraAppUI : public ui::MojoWebUIController,
public content::DevToolsAgentHostObserver {
public: public:
CameraAppUI(content::WebUI* web_ui, CameraAppUI(content::WebUI* web_ui,
std::unique_ptr<CameraAppUIDelegate> delegate); std::unique_ptr<CameraAppUIDelegate> delegate);
...@@ -63,6 +65,12 @@ class CameraAppUI : public ui::MojoWebUIController { ...@@ -63,6 +65,12 @@ class CameraAppUI : public ui::MojoWebUIController {
const GURL& url(); const GURL& url();
// content::DevToolsAgentHostObserver overrides.
void DevToolsAgentHostAttached(
content::DevToolsAgentHost* agent_host) override;
void DevToolsAgentHostDetached(
content::DevToolsAgentHost* agent_host) override;
private: private:
std::unique_ptr<CameraAppUIDelegate> delegate_; std::unique_ptr<CameraAppUIDelegate> delegate_;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <string> #include <string>
namespace content { namespace content {
class WebContents;
class WebUIDataSource; class WebUIDataSource;
} }
...@@ -37,6 +38,9 @@ class CameraAppUIDelegate { ...@@ -37,6 +38,9 @@ class CameraAppUIDelegate {
// Gets the file path in ARC file system by given file |name|. // Gets the file path in ARC file system by given file |name|.
virtual std::string GetFilePathInArcByName(const std::string& name) = 0; 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_ #endif // CHROMEOS_COMPONENTS_CAMERA_APP_UI_CAMERA_APP_UI_DELEGATE_H_
...@@ -43,6 +43,16 @@ void CameraAppWindowManager::SetCameraUsageMonitor( ...@@ -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, void CameraAppWindowManager::OnWidgetVisibilityChanged(views::Widget* widget,
bool visible) { bool visible) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
......
...@@ -38,6 +38,10 @@ class CameraAppWindowManager : public views::WidgetObserver { ...@@ -38,6 +38,10 @@ class CameraAppWindowManager : public views::WidgetObserver {
usage_monitor, usage_monitor,
base::OnceCallback<void()> callback); base::OnceCallback<void()> callback);
void SetDevToolsEnabled(bool enabled);
bool IsDevToolsEnabled();
// views::WidgetObserver: // views::WidgetObserver:
void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override; void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
void OnWidgetActivationChanged(views::Widget* widget, bool active) override; void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
...@@ -59,6 +63,9 @@ class CameraAppWindowManager : public views::WidgetObserver { ...@@ -59,6 +63,9 @@ class CameraAppWindowManager : public views::WidgetObserver {
void OnResumedCameraUsage(views::Widget* prev_owner); void OnResumedCameraUsage(views::Widget* prev_owner);
void ResumeNextOrIdle(); void ResumeNextOrIdle();
// Whether dev tools window should be opened when opening CCA window.
bool dev_tools_enabled_ = false;
base::flat_map< base::flat_map<
views::Widget*, views::Widget*,
mojo::Remote<chromeos_camera::mojom::CameraUsageOwnershipMonitor>> 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