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

Side by Side Diff: chrome/browser/android/dev_tools_server.cc

Issue 296053012: Replace StreamListenSocket with StreamSocket in HttpServer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't export HttpServer which is built in a static lib Created 6 years, 6 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/dev_tools_server.h" 5 #include "chrome/browser/android/dev_tools_server.h"
6 6
7 #include <pwd.h> 7 #include <pwd.h>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
(...skipping 22 matching lines...) Expand all
33 #include "content/public/browser/favicon_status.h" 33 #include "content/public/browser/favicon_status.h"
34 #include "content/public/browser/navigation_entry.h" 34 #include "content/public/browser/navigation_entry.h"
35 #include "content/public/browser/render_view_host.h" 35 #include "content/public/browser/render_view_host.h"
36 #include "content/public/browser/web_contents.h" 36 #include "content/public/browser/web_contents.h"
37 #include "content/public/browser/web_contents_delegate.h" 37 #include "content/public/browser/web_contents_delegate.h"
38 #include "content/public/common/content_switches.h" 38 #include "content/public/common/content_switches.h"
39 #include "content/public/common/url_constants.h" 39 #include "content/public/common/url_constants.h"
40 #include "content/public/common/user_agent.h" 40 #include "content/public/common/user_agent.h"
41 #include "grit/browser_resources.h" 41 #include "grit/browser_resources.h"
42 #include "jni/DevToolsServer_jni.h" 42 #include "jni/DevToolsServer_jni.h"
43 #include "net/socket/unix_domain_socket_posix.h" 43 #include "net/base/net_errors.h"
44 #include "net/socket/unix_domain_listen_socket_posix.h"
45 #include "net/socket/unix_domain_server_socket_posix.h"
44 #include "net/url_request/url_request_context_getter.h" 46 #include "net/url_request/url_request_context_getter.h"
45 #include "ui/base/resource/resource_bundle.h" 47 #include "ui/base/resource/resource_bundle.h"
46 48
47 using content::DevToolsAgentHost; 49 using content::DevToolsAgentHost;
48 using content::RenderViewHost; 50 using content::RenderViewHost;
49 using content::WebContents; 51 using content::WebContents;
50 52
51 namespace { 53 namespace {
52 54
53 // TL;DR: Do not change this string. 55 // TL;DR: Do not change this string.
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 } 361 }
360 362
361 callback.Run(targets); 363 callback.Run(targets);
362 } 364 }
363 365
364 virtual scoped_ptr<net::StreamListenSocket> CreateSocketForTethering( 366 virtual scoped_ptr<net::StreamListenSocket> CreateSocketForTethering(
365 net::StreamListenSocket::Delegate* delegate, 367 net::StreamListenSocket::Delegate* delegate,
366 std::string* name) OVERRIDE { 368 std::string* name) OVERRIDE {
367 *name = base::StringPrintf( 369 *name = base::StringPrintf(
368 kTetheringSocketName, getpid(), ++last_tethering_socket_); 370 kTetheringSocketName, getpid(), ++last_tethering_socket_);
369 return net::UnixDomainSocket::CreateAndListenWithAbstractNamespace( 371 return net::UnixDomainListenSocket::CreateAndListenWithAbstractNamespace(
370 *name, 372 *name,
371 "", 373 "",
372 delegate, 374 delegate,
373 base::Bind(&content::CanUserConnectToDevTools)) 375 base::Bind(&content::CanUserConnectToDevTools))
374 .PassAs<net::StreamListenSocket>(); 376 .PassAs<net::StreamListenSocket>();
375 } 377 }
376 378
377 private: 379 private:
378 static void PopulatePageThumbnails() { 380 static void PopulatePageThumbnails() {
379 Profile* profile = 381 Profile* profile =
380 ProfileManager::GetLastUsedProfile()->GetOriginalProfile(); 382 ProfileManager::GetLastUsedProfile()->GetOriginalProfile();
381 history::TopSites* top_sites = profile->GetTopSites(); 383 history::TopSites* top_sites = profile->GetTopSites();
382 if (top_sites) 384 if (top_sites)
383 top_sites->SyncWithHistory(); 385 top_sites->SyncWithHistory();
384 } 386 }
385 387
386 int last_tethering_socket_; 388 int last_tethering_socket_;
387 389
388 DISALLOW_COPY_AND_ASSIGN(DevToolsServerDelegate); 390 DISALLOW_COPY_AND_ASSIGN(DevToolsServerDelegate);
389 }; 391 };
390 392
393 // Factory for UnixDomainServerSocket. It tries a fallback socket when
394 // original socket doesn't work.
395 class UnixDomainServerSocketFactory
396 : public content::DevToolsHttpHandler::ServerSocketFactory {
397 public:
398 explicit UnixDomainServerSocketFactory(const std::string& socket_name)
399 : content::DevToolsHttpHandler::ServerSocketFactory(socket_name, 0, 1) {}
400
401 private:
402 // content::DevToolsHttpHandler::ServerSocketFactory.
403 virtual scoped_ptr<net::ServerSocket> Create() const OVERRIDE {
404 return scoped_ptr<net::ServerSocket>(
405 new net::UnixDomainServerSocket(
406 base::Bind(&content::CanUserConnectToDevTools),
407 true));
408 }
409
410 virtual scoped_ptr<net::ServerSocket> CreateAndListen() const OVERRIDE {
411 scoped_ptr<net::ServerSocket> socket = Create();
412 if (!socket)
413 return scoped_ptr<net::ServerSocket>();
414
415 if (socket->ListenWithAddressAndPort(address_, port_, backlog_) == net::OK)
416 return socket.Pass();
417
418 // Tries a fallback socket name.
419 const std::string fallback_address(
420 base::StringPrintf("%s_%d", address_.c_str(), getpid()));
421 if (socket->ListenWithAddressAndPort(fallback_address, port_, backlog_)
422 == net::OK)
423 return socket.Pass();
424
425 return scoped_ptr<net::ServerSocket>();
426 }
427
428 DISALLOW_COPY_AND_ASSIGN(UnixDomainServerSocketFactory);
429 };
430
391 } // namespace 431 } // namespace
392 432
393 DevToolsServer::DevToolsServer() 433 DevToolsServer::DevToolsServer()
394 : socket_name_(base::StringPrintf(kDevToolsChannelNameFormat, 434 : socket_name_(base::StringPrintf(kDevToolsChannelNameFormat,
395 kDefaultSocketNamePrefix)), 435 kDefaultSocketNamePrefix)),
396 protocol_handler_(NULL) { 436 protocol_handler_(NULL) {
397 // Override the default socket name if one is specified on the command line. 437 // Override the default socket name if one is specified on the command line.
398 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 438 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
399 if (command_line.HasSwitch(switches::kRemoteDebuggingSocketName)) { 439 if (command_line.HasSwitch(switches::kRemoteDebuggingSocketName)) {
400 socket_name_ = command_line.GetSwitchValueASCII( 440 socket_name_ = command_line.GetSwitchValueASCII(
(...skipping 14 matching lines...) Expand all
415 } 455 }
416 456
417 DevToolsServer::~DevToolsServer() { 457 DevToolsServer::~DevToolsServer() {
418 Stop(); 458 Stop();
419 } 459 }
420 460
421 void DevToolsServer::Start() { 461 void DevToolsServer::Start() {
422 if (protocol_handler_) 462 if (protocol_handler_)
423 return; 463 return;
424 464
465 scoped_ptr<content::DevToolsHttpHandler::ServerSocketFactory> factory(
466 new UnixDomainServerSocketFactory(socket_name_));
425 protocol_handler_ = content::DevToolsHttpHandler::Start( 467 protocol_handler_ = content::DevToolsHttpHandler::Start(
426 new net::UnixDomainSocketWithAbstractNamespaceFactory( 468 factory.Pass(),
427 socket_name_,
428 base::StringPrintf("%s_%d", socket_name_.c_str(), getpid()),
429 base::Bind(&content::CanUserConnectToDevTools)),
430 base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()), 469 base::StringPrintf(kFrontEndURL, content::GetWebKitRevision().c_str()),
431 new DevToolsServerDelegate(), 470 new DevToolsServerDelegate(),
432 base::FilePath()); 471 base::FilePath());
433 } 472 }
434 473
435 void DevToolsServer::Stop() { 474 void DevToolsServer::Stop() {
436 if (!protocol_handler_) 475 if (!protocol_handler_)
437 return; 476 return;
438 // Note that the call to Stop() below takes care of |protocol_handler_| 477 // Note that the call to Stop() below takes care of |protocol_handler_|
439 // deletion. 478 // deletion.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 jobject obj, 510 jobject obj,
472 jlong server, 511 jlong server,
473 jboolean enabled) { 512 jboolean enabled) {
474 DevToolsServer* devtools_server = reinterpret_cast<DevToolsServer*>(server); 513 DevToolsServer* devtools_server = reinterpret_cast<DevToolsServer*>(server);
475 if (enabled) { 514 if (enabled) {
476 devtools_server->Start(); 515 devtools_server->Start();
477 } else { 516 } else {
478 devtools_server->Stop(); 517 devtools_server->Stop();
479 } 518 }
480 } 519 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698