Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1141)

Side by Side Diff: android_webview/native/aw_devtools_server.cc

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "android_webview/native/aw_devtools_server.h"
6
7 #include <utility>
8
9 #include "android_webview/browser/browser_view_renderer.h"
10 #include "android_webview/common/aw_content_client.h"
11 #include "android_webview/native/aw_contents.h"
12 #include "base/bind.h"
13 #include "base/files/file_path.h"
14 #include "base/json/json_writer.h"
15 #include "base/memory/ptr_util.h"
16 #include "base/strings/stringprintf.h"
17 #include "base/strings/utf_string_conversions.h"
18 #include "base/values.h"
19 #include "content/public/browser/android/devtools_auth.h"
20 #include "content/public/browser/devtools_agent_host.h"
21 #include "content/public/browser/devtools_socket_factory.h"
22 #include "content/public/browser/web_contents.h"
23 #include "content/public/common/user_agent.h"
24 #include "jni/AwDevToolsServer_jni.h"
25 #include "net/base/net_errors.h"
26 #include "net/socket/unix_domain_server_socket_posix.h"
27
28 using base::android::JavaParamRef;
29 using content::DevToolsAgentHost;
30
31 namespace {
32
33 const char kFrontEndURL[] =
34 "http://chrome-devtools-frontend.appspot.com/serve_rev/%s/inspector.html";
35 const char kSocketNameFormat[] = "webview_devtools_remote_%d";
36 const char kTetheringSocketName[] = "webview_devtools_tethering_%d_%d";
37
38 const int kBackLog = 10;
39
40 // Factory for UnixDomainServerSocket.
41 class UnixDomainServerSocketFactory : public content::DevToolsSocketFactory {
42 public:
43 explicit UnixDomainServerSocketFactory(const std::string& socket_name)
44 : socket_name_(socket_name),
45 last_tethering_socket_(0) {
46 }
47
48 private:
49 // content::DevToolsAgentHost::ServerSocketFactory.
50 std::unique_ptr<net::ServerSocket> CreateForHttpServer() override {
51 std::unique_ptr<net::UnixDomainServerSocket> socket(
52 new net::UnixDomainServerSocket(
53 base::Bind(&content::CanUserConnectToDevTools),
54 true /* use_abstract_namespace */));
55 if (socket->BindAndListen(socket_name_, kBackLog) != net::OK)
56 return std::unique_ptr<net::ServerSocket>();
57
58 return std::move(socket);
59 }
60
61 std::unique_ptr<net::ServerSocket> CreateForTethering(
62 std::string* name) override {
63 *name = base::StringPrintf(
64 kTetheringSocketName, getpid(), ++last_tethering_socket_);
65 std::unique_ptr<net::UnixDomainServerSocket> socket(
66 new net::UnixDomainServerSocket(
67 base::Bind(&content::CanUserConnectToDevTools),
68 true /* use_abstract_namespace */));
69 if (socket->BindAndListen(*name, kBackLog) != net::OK)
70 return std::unique_ptr<net::ServerSocket>();
71
72 return std::move(socket);
73 }
74
75 std::string socket_name_;
76 int last_tethering_socket_;
77
78 DISALLOW_COPY_AND_ASSIGN(UnixDomainServerSocketFactory);
79 };
80
81 } // namespace
82
83 namespace android_webview {
84
85 AwDevToolsServer::AwDevToolsServer() : is_started_(false) {
86 }
87
88 AwDevToolsServer::~AwDevToolsServer() {
89 Stop();
90 }
91
92 void AwDevToolsServer::Start() {
93 if (is_started_)
94 return;
95 is_started_ = true;
96
97 std::unique_ptr<content::DevToolsSocketFactory> factory(
98 new UnixDomainServerSocketFactory(
99 base::StringPrintf(kSocketNameFormat, getpid())));
100 DevToolsAgentHost::StartRemoteDebuggingServer(
101 std::move(factory),
102 base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()),
103 base::FilePath(), base::FilePath(),
104 GetProduct(), GetUserAgent());
105 }
106
107 void AwDevToolsServer::Stop() {
108 DevToolsAgentHost::StopRemoteDebuggingServer();
109 is_started_ = false;
110 }
111
112 bool AwDevToolsServer::IsStarted() const {
113 return is_started_;
114 }
115
116 bool RegisterAwDevToolsServer(JNIEnv* env) {
117 return RegisterNativesImpl(env);
118 }
119
120 static jlong InitRemoteDebugging(JNIEnv* env,
121 const JavaParamRef<jobject>& obj) {
122 AwDevToolsServer* server = new AwDevToolsServer();
123 return reinterpret_cast<intptr_t>(server);
124 }
125
126 static void DestroyRemoteDebugging(JNIEnv* env,
127 const JavaParamRef<jobject>& obj,
128 jlong server) {
129 delete reinterpret_cast<AwDevToolsServer*>(server);
130 }
131
132 static void SetRemoteDebuggingEnabled(JNIEnv* env,
133 const JavaParamRef<jobject>& obj,
134 jlong server,
135 jboolean enabled) {
136 AwDevToolsServer* devtools_server =
137 reinterpret_cast<AwDevToolsServer*>(server);
138 if (enabled) {
139 devtools_server->Start();
140 } else {
141 devtools_server->Stop();
142 }
143 }
144
145 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698