fix: color select eyedropper not working within DevTools (#29729)
This commit is contained in:
parent
f00a2d0629
commit
c841247815
5 changed files with 37 additions and 1 deletions
|
@ -142,6 +142,8 @@ static_library("chrome") {
|
||||||
|
|
||||||
if (enable_color_chooser) {
|
if (enable_color_chooser) {
|
||||||
sources += [
|
sources += [
|
||||||
|
"//chrome/browser/devtools/devtools_eye_dropper.cc",
|
||||||
|
"//chrome/browser/devtools/devtools_eye_dropper.h",
|
||||||
"//chrome/browser/platform_util.cc",
|
"//chrome/browser/platform_util.cc",
|
||||||
"//chrome/browser/platform_util.h",
|
"//chrome/browser/platform_util.h",
|
||||||
"//chrome/browser/ui/browser_dialogs.h",
|
"//chrome/browser/ui/browser_dialogs.h",
|
||||||
|
|
|
@ -3473,6 +3473,30 @@ void WebContents::DevToolsSearchInPath(int request_id,
|
||||||
file_system_path));
|
file_system_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContents::DevToolsSetEyeDropperActive(bool active) {
|
||||||
|
auto* web_contents = GetWebContents();
|
||||||
|
if (!web_contents)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (active) {
|
||||||
|
eye_dropper_ = std::make_unique<DevToolsEyeDropper>(
|
||||||
|
web_contents, base::BindRepeating(&WebContents::ColorPickedInEyeDropper,
|
||||||
|
base::Unretained(this)));
|
||||||
|
} else {
|
||||||
|
eye_dropper_.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebContents::ColorPickedInEyeDropper(int r, int g, int b, int a) {
|
||||||
|
base::DictionaryValue color;
|
||||||
|
color.SetInteger("r", r);
|
||||||
|
color.SetInteger("g", g);
|
||||||
|
color.SetInteger("b", b);
|
||||||
|
color.SetInteger("a", a);
|
||||||
|
inspectable_web_contents_->CallClientFunction(
|
||||||
|
"DevToolsAPI.eyeDropperPickedColor", &color, nullptr, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS) && !defined(OS_MAC)
|
#if defined(TOOLKIT_VIEWS) && !defined(OS_MAC)
|
||||||
ui::ImageModel WebContents::GetDevToolsWindowIcon() {
|
ui::ImageModel WebContents::GetDevToolsWindowIcon() {
|
||||||
return owner_window() ? owner_window()->GetWindowAppIcon() : ui::ImageModel{};
|
return owner_window() ? owner_window()->GetWindowAppIcon() : ui::ImageModel{};
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "base/observer_list.h"
|
#include "base/observer_list.h"
|
||||||
#include "base/observer_list_types.h"
|
#include "base/observer_list_types.h"
|
||||||
|
#include "chrome/browser/devtools/devtools_eye_dropper.h"
|
||||||
#include "chrome/browser/devtools/devtools_file_system_indexer.h"
|
#include "chrome/browser/devtools/devtools_file_system_indexer.h"
|
||||||
#include "content/common/cursors/webcursor.h"
|
#include "content/common/cursors/webcursor.h"
|
||||||
#include "content/common/frame.mojom.h"
|
#include "content/common/frame.mojom.h"
|
||||||
|
@ -658,6 +659,7 @@ class WebContents : public gin::Wrappable<WebContents>,
|
||||||
void DevToolsSearchInPath(int request_id,
|
void DevToolsSearchInPath(int request_id,
|
||||||
const std::string& file_system_path,
|
const std::string& file_system_path,
|
||||||
const std::string& query) override;
|
const std::string& query) override;
|
||||||
|
void DevToolsSetEyeDropperActive(bool active) override;
|
||||||
|
|
||||||
// InspectableWebContentsViewDelegate:
|
// InspectableWebContentsViewDelegate:
|
||||||
#if defined(TOOLKIT_VIEWS) && !defined(OS_MAC)
|
#if defined(TOOLKIT_VIEWS) && !defined(OS_MAC)
|
||||||
|
@ -668,6 +670,8 @@ class WebContents : public gin::Wrappable<WebContents>,
|
||||||
std::string* class_name) override;
|
std::string* class_name) override;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void ColorPickedInEyeDropper(int r, int g, int b, int a);
|
||||||
|
|
||||||
// DevTools index event callbacks.
|
// DevTools index event callbacks.
|
||||||
void OnDevToolsIndexingWorkCalculated(int request_id,
|
void OnDevToolsIndexingWorkCalculated(int request_id,
|
||||||
const std::string& file_system_path,
|
const std::string& file_system_path,
|
||||||
|
@ -740,6 +744,8 @@ class WebContents : public gin::Wrappable<WebContents>,
|
||||||
|
|
||||||
scoped_refptr<DevToolsFileSystemIndexer> devtools_file_system_indexer_;
|
scoped_refptr<DevToolsFileSystemIndexer> devtools_file_system_indexer_;
|
||||||
|
|
||||||
|
std::unique_ptr<DevToolsEyeDropper> eye_dropper_;
|
||||||
|
|
||||||
ElectronBrowserContext* browser_context_;
|
ElectronBrowserContext* browser_context_;
|
||||||
|
|
||||||
// The stored InspectableWebContents object.
|
// The stored InspectableWebContents object.
|
||||||
|
|
|
@ -789,7 +789,10 @@ void InspectableWebContents::SearchInPath(int request_id,
|
||||||
void InspectableWebContents::SetWhitelistedShortcuts(
|
void InspectableWebContents::SetWhitelistedShortcuts(
|
||||||
const std::string& message) {}
|
const std::string& message) {}
|
||||||
|
|
||||||
void InspectableWebContents::SetEyeDropperActive(bool active) {}
|
void InspectableWebContents::SetEyeDropperActive(bool active) {
|
||||||
|
if (delegate_)
|
||||||
|
delegate_->DevToolsSetEyeDropperActive(active);
|
||||||
|
}
|
||||||
void InspectableWebContents::ShowCertificateViewer(
|
void InspectableWebContents::ShowCertificateViewer(
|
||||||
const std::string& cert_chain) {}
|
const std::string& cert_chain) {}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ class InspectableWebContentsDelegate {
|
||||||
virtual void DevToolsSearchInPath(int request_id,
|
virtual void DevToolsSearchInPath(int request_id,
|
||||||
const std::string& file_system_path,
|
const std::string& file_system_path,
|
||||||
const std::string& query) {}
|
const std::string& query) {}
|
||||||
|
virtual void DevToolsSetEyeDropperActive(bool active) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
Loading…
Reference in a new issue