summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-02-18 14:41:34 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-03-02 08:10:07 +0100
commitd7321959bafdfa80d866ee25b4b9043e8be3a2d1 (patch)
tree2f6f2b82a2733cb63125bb5397932422e3213ef9
parent11ecb9c8d08acb05be2becb073835a4e0e963639 (diff)
Add devtools eyedropper support
Was not using anything Chrome specific, and could be directly reused by us. Task-number: QTBUG-85171 Change-Id: Ib739cead6d721785de5843d0c971f77b77f20359 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r--src/core/devtools_frontend_qt.cpp30
-rw-r--r--src/core/devtools_frontend_qt.h4
-rw-r--r--src/core/qtwebengine_sources.gni2
3 files changed, 36 insertions, 0 deletions
diff --git a/src/core/devtools_frontend_qt.cpp b/src/core/devtools_frontend_qt.cpp
index 71d51190a..553757fbb 100644
--- a/src/core/devtools_frontend_qt.cpp
+++ b/src/core/devtools_frontend_qt.cpp
@@ -59,6 +59,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/task/post_task.h"
#include "base/values.h"
+#include "chrome/browser/devtools/devtools_eye_dropper.h"
#include "chrome/common/url_constants.h"
#include "components/prefs/in_memory_pref_store.h"
#include "components/prefs/json_pref_store.h"
@@ -531,6 +532,11 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me
Activate();
} else if (method == "closeWindow") {
web_contents()->Close();
+ } else if (method == "setEyeDropperActive" && params->GetSize() == 1) {
+ bool active;
+ if (!params->GetBoolean(0, &active))
+ return;
+ SetEyeDropperActive(active);
} else {
VLOG(1) << "Unimplemented devtools method: " << message;
return;
@@ -540,6 +546,30 @@ void DevToolsFrontendQt::HandleMessageFromDevToolsFrontend(const std::string &me
SendMessageAck(request_id, nullptr);
}
+void DevToolsFrontendQt::SetEyeDropperActive(bool active)
+{
+ if (!m_inspectedContents)
+ return;
+ if (active) {
+ m_eyeDropper.reset(new DevToolsEyeDropper(
+ m_inspectedContents,
+ base::Bind(&DevToolsFrontendQt::ColorPickedInEyeDropper,
+ base::Unretained(this))));
+ } else {
+ m_eyeDropper.reset();
+ }
+}
+
+void DevToolsFrontendQt::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);
+ CallClientFunction("DevToolsAPI.eyeDropperPickedColor", &color, nullptr, nullptr);
+}
+
void DevToolsFrontendQt::DispatchProtocolMessage(content::DevToolsAgentHost *agentHost, base::span<const uint8_t> message)
{
Q_UNUSED(agentHost);
diff --git a/src/core/devtools_frontend_qt.h b/src/core/devtools_frontend_qt.h
index 423131c4e..aac5909dc 100644
--- a/src/core/devtools_frontend_qt.h
+++ b/src/core/devtools_frontend_qt.h
@@ -65,6 +65,7 @@ class RenderViewHost;
class WebContents;
} // namespace content
+class DevToolsEyeDropper;
class PersistentPrefStore;
namespace QtWebEngineCore {
@@ -113,6 +114,8 @@ private:
void RemovePreference(const std::string &name);
void ClearPreferences();
void CreateJsonPreferences(bool clear);
+ void SetEyeDropperActive(bool active);
+ void ColorPickedInEyeDropper(int r, int g, int b, int a);
// We shouldn't be keeping it alive
QWeakPointer<WebContentsAdapter> m_frontendAdapter;
@@ -123,6 +126,7 @@ private:
int m_inspect_element_at_x;
int m_inspect_element_at_y;
std::unique_ptr<content::DevToolsFrontendHost> m_frontendHost;
+ std::unique_ptr<DevToolsEyeDropper> m_eyeDropper;
class NetworkResourceLoader;
std::set<std::unique_ptr<NetworkResourceLoader>, base::UniquePtrComparator> m_loaders;
diff --git a/src/core/qtwebengine_sources.gni b/src/core/qtwebengine_sources.gni
index 7ff192bf3..dc337e1de 100644
--- a/src/core/qtwebengine_sources.gni
+++ b/src/core/qtwebengine_sources.gni
@@ -64,6 +64,8 @@ source_set("qtwebengine_sources") {
"//chrome/browser/custom_handlers/protocol_handler_registry.h",
"//chrome/browser/custom_handlers/protocol_handler_registry_factory.cc",
"//chrome/browser/custom_handlers/protocol_handler_registry_factory.h",
+ "//chrome/browser/devtools/devtools_eye_dropper.cc",
+ "//chrome/browser/devtools/devtools_eye_dropper.h",
"//chrome/browser/media/webrtc/desktop_media_list.h",
"//chrome/browser/net/chrome_mojo_proxy_resolver_factory.cc",
"//chrome/browser/net/chrome_mojo_proxy_resolver_factory.h",