Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "content/browser/devtools/devtools_http_handler_impl.h" | 5 #include "content/browser/devtools/devtools_http_handler_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 326 void DevToolsHttpHandlerImpl::StopWithoutRelease() { | 326 void DevToolsHttpHandlerImpl::StopWithoutRelease() { |
| 327 if (!thread_) | 327 if (!thread_) |
| 328 return; | 328 return; |
| 329 BrowserThread::PostTaskAndReply( | 329 BrowserThread::PostTaskAndReply( |
| 330 BrowserThread::FILE, FROM_HERE, | 330 BrowserThread::FILE, FROM_HERE, |
| 331 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), | 331 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), |
| 332 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThread, this)); | 332 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThread, this)); |
| 333 } | 333 } |
| 334 | 334 |
| 335 GURL DevToolsHttpHandlerImpl::GetFrontendURL() { | 335 GURL DevToolsHttpHandlerImpl::GetFrontendURL() { |
| 336 net::IPEndPoint ip_address; | 336 if (!server_ip_address_) |
| 337 if (server_ && server_->GetLocalAddress(&ip_address)) | |
| 338 return GURL(); | 337 return GURL(); |
| 339 return GURL(std::string("http://") + ip_address.ToString() + frontend_url_); | 338 return GURL(std::string("http://") + server_ip_address_->ToString() + frontend _url_); |
| 340 } | 339 } |
| 341 | 340 |
| 342 static std::string PathWithoutParams(const std::string& path) { | 341 static std::string PathWithoutParams(const std::string& path) { |
| 343 size_t query_position = path.find("?"); | 342 size_t query_position = path.find("?"); |
| 344 if (query_position != std::string::npos) | 343 if (query_position != std::string::npos) |
| 345 return path.substr(0, query_position); | 344 return path.substr(0, query_position); |
| 346 return path; | 345 return path; |
| 347 } | 346 } |
| 348 | 347 |
| 349 static std::string GetMimeType(const std::string& filename) { | 348 static std::string GetMimeType(const std::string& filename) { |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 760 ConnectionToClientMap::iterator it = | 759 ConnectionToClientMap::iterator it = |
| 761 connection_to_client_ui_.find(connection_id); | 760 connection_to_client_ui_.find(connection_id); |
| 762 if (it != connection_to_client_ui_.end()) { | 761 if (it != connection_to_client_ui_.end()) { |
| 763 DevToolsAgentHostClientImpl* client = | 762 DevToolsAgentHostClientImpl* client = |
| 764 static_cast<DevToolsAgentHostClientImpl*>(it->second); | 763 static_cast<DevToolsAgentHostClientImpl*>(it->second); |
| 765 delete client; | 764 delete client; |
| 766 connection_to_client_ui_.erase(connection_id); | 765 connection_to_client_ui_.erase(connection_id); |
| 767 } | 766 } |
| 768 } | 767 } |
| 769 | 768 |
| 769 void DevToolsHttpHandlerImpl::OnHttpServerInitialized( | |
| 770 const net::IPEndPoint& ip_address) { | |
| 771 server_ip_address_.reset(new net::IPEndPoint(ip_address)); | |
| 772 } | |
| 773 | |
| 774 void DevToolsHttpHandlerImpl::OnHttpServerDeinitialized() { | |
| 775 server_ip_address_.reset(NULL); | |
| 776 } | |
| 777 | |
| 770 DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( | 778 DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( |
| 771 scoped_ptr<ServerSocketFactory> server_socket_factory, | 779 scoped_ptr<ServerSocketFactory> server_socket_factory, |
| 772 const std::string& frontend_url, | 780 const std::string& frontend_url, |
| 773 DevToolsHttpHandlerDelegate* delegate, | 781 DevToolsHttpHandlerDelegate* delegate, |
| 774 const base::FilePath& active_port_output_directory) | 782 const base::FilePath& active_port_output_directory) |
| 775 : frontend_url_(frontend_url), | 783 : frontend_url_(frontend_url), |
| 776 server_socket_factory_(server_socket_factory.Pass()), | 784 server_socket_factory_(server_socket_factory.Pass()), |
| 777 delegate_(delegate), | 785 delegate_(delegate), |
| 778 active_port_output_directory_(active_port_output_directory) { | 786 active_port_output_directory_(active_port_output_directory) { |
| 779 if (frontend_url_.empty()) | 787 if (frontend_url_.empty()) |
| 780 frontend_url_ = "/devtools/devtools.html"; | 788 frontend_url_ = "/devtools/devtools.html"; |
| 781 | 789 |
| 782 // Balanced in ResetHandlerThreadAndRelease(). | 790 // Balanced in ResetHandlerThreadAndRelease(). |
| 783 AddRef(); | 791 AddRef(); |
| 784 } | 792 } |
| 785 | 793 |
| 786 // Runs on the handler thread | 794 // Runs on the handler thread |
| 787 void DevToolsHttpHandlerImpl::Init() { | 795 void DevToolsHttpHandlerImpl::Init() { |
| 788 scoped_ptr<net::ServerSocket> server_socket = | 796 scoped_ptr<net::ServerSocket> server_socket = |
| 789 server_socket_factory_->CreateAndListen(); | 797 server_socket_factory_->CreateAndListen(); |
| 790 if (!server_socket) { | 798 if (!server_socket) { |
| 791 LOG(ERROR) << "Cannot start http server for devtools. Stop devtools."; | 799 LOG(ERROR) << "Cannot start http server for devtools. Stop devtools."; |
| 792 BrowserThread::PostTask( | 800 BrowserThread::PostTask( |
| 793 BrowserThread::UI, FROM_HERE, | 801 BrowserThread::UI, FROM_HERE, |
| 794 base::Bind(&DevToolsHttpHandlerImpl::StopWithoutRelease, this)); | 802 base::Bind(&DevToolsHttpHandlerImpl::StopWithoutRelease, this)); |
| 795 return; | 803 return; |
| 796 } | 804 } |
| 797 | 805 |
| 798 server_.reset(new net::HttpServer(server_socket.Pass(), this)); | 806 server_.reset(new net::HttpServer(server_socket.Pass(), this)); |
| 807 net::IPEndPoint ip_address; | |
| 808 server_->GetLocalAddress(&ip_address); | |
| 809 BrowserThread::PostTask( | |
| 810 BrowserThread::UI, FROM_HERE, | |
| 811 base::Bind(&DevToolsHttpHandlerImpl::OnHttpServerInitialized, | |
| 812 this, ip_address)); | |
| 799 if (!active_port_output_directory_.empty()) | 813 if (!active_port_output_directory_.empty()) |
| 800 WriteActivePortToUserProfile(); | 814 WriteActivePortToUserProfile(); |
| 801 } | 815 } |
| 802 | 816 |
| 803 // Runs on the handler thread | 817 // Runs on the handler thread |
| 804 void DevToolsHttpHandlerImpl::Teardown() { | 818 void DevToolsHttpHandlerImpl::Teardown() { |
| 805 server_.reset(NULL); | 819 server_.reset(NULL); |
| 820 BrowserThread::PostTask( | |
| 821 BrowserThread::UI, FROM_HERE, | |
| 822 base::Bind(&DevToolsHttpHandlerImpl::OnHttpServerDeinitialized, this)); | |
| 806 } | 823 } |
| 807 | 824 |
| 808 // Runs on FILE thread to make sure that it is serialized against | 825 // Runs on FILE thread to make sure that it is serialized against |
| 809 // {Start|Stop}HandlerThread and to allow calling pthread_join. | 826 // {Start|Stop}HandlerThread and to allow calling pthread_join. |
| 810 void DevToolsHttpHandlerImpl::StopHandlerThread() { | 827 void DevToolsHttpHandlerImpl::StopHandlerThread() { |
| 811 if (!thread_->message_loop()) | 828 if (!thread_->message_loop()) |
| 812 return; | 829 return; |
| 813 thread_->message_loop()->PostTask( | 830 thread_->message_loop()->PostTask( |
|
vkuzkokov
2014/10/27 09:51:43
It seems like you could clear server_ip_address_ a
| |
| 814 FROM_HERE, | 831 FROM_HERE, |
| 815 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); | 832 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); |
| 816 // Thread::Stop joins the thread. | 833 // Thread::Stop joins the thread. |
| 817 thread_->Stop(); | 834 thread_->Stop(); |
| 818 } | 835 } |
| 819 | 836 |
| 820 void DevToolsHttpHandlerImpl::WriteActivePortToUserProfile() { | 837 void DevToolsHttpHandlerImpl::WriteActivePortToUserProfile() { |
| 821 DCHECK(!active_port_output_directory_.empty()); | 838 DCHECK(!active_port_output_directory_.empty()); |
| 822 net::IPEndPoint endpoint; | 839 net::IPEndPoint endpoint; |
| 823 int err; | 840 int err; |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 960 id.c_str(), | 977 id.c_str(), |
| 961 host); | 978 host); |
| 962 dictionary->SetString( | 979 dictionary->SetString( |
| 963 kTargetDevtoolsFrontendUrlField, devtools_frontend_url); | 980 kTargetDevtoolsFrontendUrlField, devtools_frontend_url); |
| 964 } | 981 } |
| 965 | 982 |
| 966 return dictionary; | 983 return dictionary; |
| 967 } | 984 } |
| 968 | 985 |
| 969 } // namespace content | 986 } // namespace content |
| OLD | NEW |