Commit 00700c38 authored by vkuzkokov's avatar vkuzkokov Committed by Commit bot

[DevTools] Remote JSON requests from javascript (Chromium side)

BUG=

Review URL: https://codereview.chromium.org/912863002

Cr-Commit-Position: refs/heads/master@{#320926}
parent 3ca96c30
...@@ -71,6 +71,16 @@ bool IsWebRTCDeviceProviderEnabled() { ...@@ -71,6 +71,16 @@ bool IsWebRTCDeviceProviderEnabled() {
switches::kEnableDevToolsExperiments); switches::kEnableDevToolsExperiments);
} }
bool BrowserIdFromString(const std::string& browser_id_str,
DevToolsAndroidBridge::BrowserId* browser_id) {
size_t colon_pos = browser_id_str.find(':');
if (colon_pos == std::string::npos)
return false;
browser_id->first = browser_id_str.substr(0, colon_pos);
browser_id->second = browser_id_str.substr(colon_pos + 1);
return true;
}
} // namespace } // namespace
// DiscoveryRequest ----------------------------------------------------- // DiscoveryRequest -----------------------------------------------------
...@@ -678,6 +688,18 @@ DevToolsAndroidBridge::GetBrowserAgentHost( ...@@ -678,6 +688,18 @@ DevToolsAndroidBridge::GetBrowserAgentHost(
browser->IsWebView()); browser->IsWebView());
} }
void DevToolsAndroidBridge::SendJsonRequest(
const std::string& browser_id_str,
const std::string& url,
const JsonRequestCallback& callback) {
BrowserId browser_id;
if (!BrowserIdFromString(browser_id_str, &browser_id)) {
callback.Run(net::ERR_FAILED, std::string());
return;
}
SendJsonRequest(browser_id, url, callback);
}
scoped_refptr<AndroidDeviceManager::Device> DevToolsAndroidBridge::FindDevice( scoped_refptr<AndroidDeviceManager::Device> DevToolsAndroidBridge::FindDevice(
const std::string& serial) { const std::string& serial) {
DeviceMap::iterator it = device_map_.find(serial); DeviceMap::iterator it = device_map_.find(serial);
......
...@@ -223,6 +223,10 @@ class DevToolsAndroidBridge : public KeyedService { ...@@ -223,6 +223,10 @@ class DevToolsAndroidBridge : public KeyedService {
scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost( scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost(
scoped_refptr<RemoteBrowser> browser); scoped_refptr<RemoteBrowser> browser);
void SendJsonRequest(const std::string& browser_id_str,
const std::string& url,
const JsonRequestCallback& callback);
private: private:
friend struct content::BrowserThread::DeleteOnThread< friend struct content::BrowserThread::DeleteOnThread<
content::BrowserThread::UI>; content::BrowserThread::UI>;
......
...@@ -195,5 +195,7 @@ DevToolsEmbedderMessageDispatcher::CreateForDevToolsFrontend( ...@@ -195,5 +195,7 @@ DevToolsEmbedderMessageDispatcher::CreateForDevToolsFrontend(
d->RegisterHandler("sendMessageToBrowser", d->RegisterHandler("sendMessageToBrowser",
&Delegate::SendMessageToBrowser, delegate); &Delegate::SendMessageToBrowser, delegate);
d->RegisterHandler("recordActionUMA", &Delegate::RecordActionUMA, delegate); d->RegisterHandler("recordActionUMA", &Delegate::RecordActionUMA, delegate);
d->RegisterHandlerWithCallback("sendJsonRequest",
&Delegate::SendJsonRequest, delegate);
return d; return d;
} }
...@@ -71,6 +71,9 @@ class DevToolsEmbedderMessageDispatcher { ...@@ -71,6 +71,9 @@ class DevToolsEmbedderMessageDispatcher {
virtual void SetDevicesUpdatesEnabled(bool enabled) = 0; virtual void SetDevicesUpdatesEnabled(bool enabled) = 0;
virtual void SendMessageToBrowser(const std::string& message) = 0; virtual void SendMessageToBrowser(const std::string& message) = 0;
virtual void RecordActionUMA(const std::string& name, int action) = 0; virtual void RecordActionUMA(const std::string& name, int action) = 0;
virtual void SendJsonRequest(const DispatchCallback& callback,
const std::string& browser_id,
const std::string& url) = 0;
}; };
using DispatchCallback = Delegate::DispatchCallback; using DispatchCallback = Delegate::DispatchCallback;
......
...@@ -9,11 +9,13 @@ ...@@ -9,11 +9,13 @@
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/path_service.h" #include "base/path_service.h"
#include "base/prefs/pref_service.h" #include "base/prefs/pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/test/test_timeouts.h" #include "base/test/test_timeouts.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/devtools/browser_list_tabcontents_provider.h" #include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
#include "chrome/browser/devtools/device/self_device_provider.h"
#include "chrome/browser/devtools/devtools_window_testing.h" #include "chrome/browser/devtools/devtools_window_testing.h"
#include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_browsertest.h"
...@@ -87,6 +89,8 @@ const char kReloadSharedWorkerTestPage[] = ...@@ -87,6 +89,8 @@ const char kReloadSharedWorkerTestPage[] =
const char kReloadSharedWorkerTestWorker[] = const char kReloadSharedWorkerTestWorker[] =
"files/workers/debug_shared_worker_initialization.js"; "files/workers/debug_shared_worker_initialization.js";
const int kRemoteDebuggingPort = 9225;
void RunTestFunction(DevToolsWindow* window, const char* test_name) { void RunTestFunction(DevToolsWindow* window, const char* test_name) {
std::string result; std::string result;
...@@ -926,7 +930,7 @@ IN_PROC_BROWSER_TEST_F(DevToolsAgentHostTest, TestAgentHostReleased) { ...@@ -926,7 +930,7 @@ IN_PROC_BROWSER_TEST_F(DevToolsAgentHostTest, TestAgentHostReleased) {
<< "DevToolsAgentHost is not released when the tab is closed"; << "DevToolsAgentHost is not released when the tab is closed";
} }
class RemoteDebuggingTest: public ExtensionApiTest { class RemoteDebuggingTest : public ExtensionApiTest {
void SetUpCommandLine(base::CommandLine* command_line) override { void SetUpCommandLine(base::CommandLine* command_line) override {
ExtensionApiTest::SetUpCommandLine(command_line); ExtensionApiTest::SetUpCommandLine(command_line);
command_line->AppendSwitchASCII(switches::kRemoteDebuggingPort, "9222"); command_line->AppendSwitchASCII(switches::kRemoteDebuggingPort, "9222");
...@@ -966,3 +970,19 @@ IN_PROC_BROWSER_TEST_F(DevToolsPolicyTest, PolicyTrue) { ...@@ -966,3 +970,19 @@ IN_PROC_BROWSER_TEST_F(DevToolsPolicyTest, PolicyTrue) {
DevToolsWindow* window = DevToolsWindow::FindDevToolsWindow(agent.get()); DevToolsWindow* window = DevToolsWindow::FindDevToolsWindow(agent.get());
ASSERT_FALSE(window); ASSERT_FALSE(window);
} }
class RemoteWebSocketTest : public DevToolsSanityTest {
void SetUpCommandLine(base::CommandLine* command_line) override {
DevToolsSanityTest::SetUpCommandLine(command_line);
command_line->AppendSwitchASCII(switches::kRemoteDebuggingPort,
base::IntToString(kRemoteDebuggingPort));
}
};
IN_PROC_BROWSER_TEST_F(RemoteWebSocketTest, TestWebSocket) {
AndroidDeviceManager::DeviceProviders device_providers;
device_providers.push_back(new SelfAsDeviceProvider(kRemoteDebuggingPort));
DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile())->
set_device_providers_for_test(device_providers);
RunTest("testRemoteWebSocket", "about:blank");
}
...@@ -406,12 +406,14 @@ GURL DevToolsUIBindings::ApplyThemeToURL(Profile* profile, ...@@ -406,12 +406,14 @@ GURL DevToolsUIBindings::ApplyThemeToURL(Profile* profile,
DevToolsUIBindings::DevToolsUIBindings(content::WebContents* web_contents) DevToolsUIBindings::DevToolsUIBindings(content::WebContents* web_contents)
: profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())), : profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
android_bridge_(DevToolsAndroidBridge::Factory::GetForProfile(profile_)),
web_contents_(web_contents), web_contents_(web_contents),
delegate_(new DefaultBindingsDelegate(web_contents_)), delegate_(new DefaultBindingsDelegate(web_contents_)),
device_count_updates_enabled_(false), device_count_updates_enabled_(false),
devices_updates_enabled_(false), devices_updates_enabled_(false),
frontend_loaded_(false), frontend_loaded_(false),
weak_factory_(this) { weak_factory_(this) {
DCHECK(android_bridge_);
g_instances.Get().push_back(this); g_instances.Get().push_back(this);
frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false;
...@@ -779,6 +781,26 @@ void DevToolsUIBindings::RecordActionUMA(const std::string& name, int action) { ...@@ -779,6 +781,26 @@ void DevToolsUIBindings::RecordActionUMA(const std::string& name, int action) {
UMA_HISTOGRAM_ENUMERATION(name, action, kDevToolsPanelShownBoundary); UMA_HISTOGRAM_ENUMERATION(name, action, kDevToolsPanelShownBoundary);
} }
void DevToolsUIBindings::SendJsonRequest(const DispatchCallback& callback,
const std::string& browser_id,
const std::string& url) {
android_bridge_->SendJsonRequest(browser_id, url,
base::Bind(&DevToolsUIBindings::JsonReceived,
weak_factory_.GetWeakPtr(),
callback));
}
void DevToolsUIBindings::JsonReceived(const DispatchCallback& callback,
int result,
const std::string& message) {
if (result != net::OK) {
callback.Run(nullptr);
return;
}
base::StringValue message_value(message);
callback.Run(&message_value);
}
void DevToolsUIBindings::OnURLFetchComplete(const net::URLFetcher* source) { void DevToolsUIBindings::OnURLFetchComplete(const net::URLFetcher* source) {
DCHECK(source); DCHECK(source);
PendingRequestsMap::iterator it = pending_requests_.find(source); PendingRequestsMap::iterator it = pending_requests_.find(source);
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "net/url_request/url_fetcher_delegate.h" #include "net/url_request/url_fetcher_delegate.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
class DevToolsAndroidBridge;
class InfoBarService; class InfoBarService;
class Profile; class Profile;
...@@ -135,6 +136,9 @@ class DevToolsUIBindings : public content::NotificationObserver, ...@@ -135,6 +136,9 @@ class DevToolsUIBindings : public content::NotificationObserver,
void SetDevicesUpdatesEnabled(bool enabled) override; void SetDevicesUpdatesEnabled(bool enabled) override;
void SendMessageToBrowser(const std::string& message) override; void SendMessageToBrowser(const std::string& message) override;
void RecordActionUMA(const std::string& name, int action) override; void RecordActionUMA(const std::string& name, int action) override;
void SendJsonRequest(const DispatchCallback& callback,
const std::string& browser_id,
const std::string& url) override;
// net::URLFetcherDelegate overrides. // net::URLFetcherDelegate overrides.
void OnURLFetchComplete(const net::URLFetcher* source) override; void OnURLFetchComplete(const net::URLFetcher* source) override;
...@@ -155,6 +159,10 @@ class DevToolsUIBindings : public content::NotificationObserver, ...@@ -155,6 +159,10 @@ class DevToolsUIBindings : public content::NotificationObserver,
void DidNavigateMainFrame(); void DidNavigateMainFrame();
void FrontendLoaded(); void FrontendLoaded();
void JsonReceived(const DispatchCallback& callback,
int result,
const std::string& message);
// DevToolsFileHelper callbacks. // DevToolsFileHelper callbacks.
void FileSavedAs(const std::string& url); void FileSavedAs(const std::string& url);
void CanceledFileSaveAs(const std::string& url); void CanceledFileSaveAs(const std::string& url);
...@@ -185,6 +193,7 @@ class DevToolsUIBindings : public content::NotificationObserver, ...@@ -185,6 +193,7 @@ class DevToolsUIBindings : public content::NotificationObserver,
scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_; scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_;
Profile* profile_; Profile* profile_;
DevToolsAndroidBridge* android_bridge_;
content::WebContents* web_contents_; content::WebContents* web_contents_;
scoped_ptr<Delegate> delegate_; scoped_ptr<Delegate> delegate_;
scoped_refptr<content::DevToolsAgentHost> agent_host_; scoped_refptr<content::DevToolsAgentHost> agent_host_;
......
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