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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 return; | 311 return; |
312 } | 312 } |
313 | 313 |
314 thread_->message_loop()->PostTask( | 314 thread_->message_loop()->PostTask( |
315 FROM_HERE, | 315 FROM_HERE, |
316 base::Bind(&DevToolsHttpHandlerImpl::Init, this)); | 316 base::Bind(&DevToolsHttpHandlerImpl::Init, this)); |
317 } | 317 } |
318 | 318 |
319 void DevToolsHttpHandlerImpl::ResetHandlerThread() { | 319 void DevToolsHttpHandlerImpl::ResetHandlerThread() { |
320 thread_.reset(); | 320 thread_.reset(); |
| 321 server_ip_address_.reset(); |
321 } | 322 } |
322 | 323 |
323 void DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease() { | 324 void DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease() { |
324 ResetHandlerThread(); | 325 ResetHandlerThread(); |
325 Release(); | 326 Release(); |
326 } | 327 } |
327 | 328 |
328 void DevToolsHttpHandlerImpl::Stop() { | 329 void DevToolsHttpHandlerImpl::Stop() { |
329 if (!thread_) | 330 if (!thread_) |
330 return; | 331 return; |
331 BrowserThread::PostTaskAndReply( | 332 BrowserThread::PostTaskAndReply( |
332 BrowserThread::FILE, FROM_HERE, | 333 BrowserThread::FILE, FROM_HERE, |
333 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), | 334 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), |
334 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); | 335 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThreadAndRelease, this)); |
335 } | 336 } |
336 | 337 |
337 void DevToolsHttpHandlerImpl::StopWithoutRelease() { | 338 void DevToolsHttpHandlerImpl::StopWithoutRelease() { |
338 if (!thread_) | 339 if (!thread_) |
339 return; | 340 return; |
340 BrowserThread::PostTaskAndReply( | 341 BrowserThread::PostTaskAndReply( |
341 BrowserThread::FILE, FROM_HERE, | 342 BrowserThread::FILE, FROM_HERE, |
342 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), | 343 base::Bind(&DevToolsHttpHandlerImpl::StopHandlerThread, this), |
343 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThread, this)); | 344 base::Bind(&DevToolsHttpHandlerImpl::ResetHandlerThread, this)); |
344 } | 345 } |
345 | 346 |
346 GURL DevToolsHttpHandlerImpl::GetFrontendURL() { | 347 GURL DevToolsHttpHandlerImpl::GetFrontendURL() { |
347 net::IPEndPoint ip_address; | 348 if (!server_ip_address_) |
348 if (server_ && server_->GetLocalAddress(&ip_address)) | |
349 return GURL(); | 349 return GURL(); |
350 return GURL(std::string("http://") + ip_address.ToString() + frontend_url_); | 350 return GURL(std::string("http://") + server_ip_address_->ToString() + frontend
_url_); |
351 } | 351 } |
352 | 352 |
353 static std::string PathWithoutParams(const std::string& path) { | 353 static std::string PathWithoutParams(const std::string& path) { |
354 size_t query_position = path.find("?"); | 354 size_t query_position = path.find("?"); |
355 if (query_position != std::string::npos) | 355 if (query_position != std::string::npos) |
356 return path.substr(0, query_position); | 356 return path.substr(0, query_position); |
357 return path; | 357 return path; |
358 } | 358 } |
359 | 359 |
360 static std::string GetMimeType(const std::string& filename) { | 360 static std::string GetMimeType(const std::string& filename) { |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 ConnectionToClientMap::iterator it = | 769 ConnectionToClientMap::iterator it = |
770 connection_to_client_ui_.find(connection_id); | 770 connection_to_client_ui_.find(connection_id); |
771 if (it != connection_to_client_ui_.end()) { | 771 if (it != connection_to_client_ui_.end()) { |
772 DevToolsAgentHostClientImpl* client = | 772 DevToolsAgentHostClientImpl* client = |
773 static_cast<DevToolsAgentHostClientImpl*>(it->second); | 773 static_cast<DevToolsAgentHostClientImpl*>(it->second); |
774 delete client; | 774 delete client; |
775 connection_to_client_ui_.erase(connection_id); | 775 connection_to_client_ui_.erase(connection_id); |
776 } | 776 } |
777 } | 777 } |
778 | 778 |
| 779 void DevToolsHttpHandlerImpl::OnHttpServerInitialized( |
| 780 const net::IPEndPoint& ip_address) { |
| 781 server_ip_address_.reset(new net::IPEndPoint(ip_address)); |
| 782 } |
| 783 |
779 DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( | 784 DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( |
780 scoped_ptr<ServerSocketFactory> server_socket_factory, | 785 scoped_ptr<ServerSocketFactory> server_socket_factory, |
781 const std::string& frontend_url, | 786 const std::string& frontend_url, |
782 DevToolsHttpHandlerDelegate* delegate, | 787 DevToolsHttpHandlerDelegate* delegate, |
783 const base::FilePath& active_port_output_directory) | 788 const base::FilePath& active_port_output_directory) |
784 : frontend_url_(frontend_url), | 789 : frontend_url_(frontend_url), |
785 server_socket_factory_(server_socket_factory.Pass()), | 790 server_socket_factory_(server_socket_factory.Pass()), |
786 delegate_(delegate), | 791 delegate_(delegate), |
787 active_port_output_directory_(active_port_output_directory) { | 792 active_port_output_directory_(active_port_output_directory) { |
788 if (frontend_url_.empty()) | 793 if (frontend_url_.empty()) |
789 frontend_url_ = "/devtools/devtools.html"; | 794 frontend_url_ = "/devtools/devtools.html"; |
790 | 795 |
791 // Balanced in ResetHandlerThreadAndRelease(). | 796 // Balanced in ResetHandlerThreadAndRelease(). |
792 AddRef(); | 797 AddRef(); |
793 } | 798 } |
794 | 799 |
795 // Runs on the handler thread | 800 // Runs on the handler thread |
796 void DevToolsHttpHandlerImpl::Init() { | 801 void DevToolsHttpHandlerImpl::Init() { |
797 scoped_ptr<net::ServerSocket> server_socket = | 802 scoped_ptr<net::ServerSocket> server_socket = |
798 server_socket_factory_->CreateAndListen(); | 803 server_socket_factory_->CreateAndListen(); |
799 if (!server_socket) { | 804 if (!server_socket) { |
800 LOG(ERROR) << "Cannot start http server for devtools. Stop devtools."; | 805 LOG(ERROR) << "Cannot start http server for devtools. Stop devtools."; |
801 BrowserThread::PostTask( | 806 BrowserThread::PostTask( |
802 BrowserThread::UI, FROM_HERE, | 807 BrowserThread::UI, FROM_HERE, |
803 base::Bind(&DevToolsHttpHandlerImpl::StopWithoutRelease, this)); | 808 base::Bind(&DevToolsHttpHandlerImpl::StopWithoutRelease, this)); |
804 return; | 809 return; |
805 } | 810 } |
806 | 811 |
807 server_.reset(new net::HttpServer(server_socket.Pass(), this)); | 812 server_.reset(new net::HttpServer(server_socket.Pass(), this)); |
| 813 net::IPEndPoint ip_address; |
| 814 server_->GetLocalAddress(&ip_address); |
| 815 BrowserThread::PostTask( |
| 816 BrowserThread::UI, FROM_HERE, |
| 817 base::Bind(&DevToolsHttpHandlerImpl::OnHttpServerInitialized, |
| 818 this, ip_address)); |
808 if (!active_port_output_directory_.empty()) | 819 if (!active_port_output_directory_.empty()) |
809 WriteActivePortToUserProfile(); | 820 WriteActivePortToUserProfile(); |
810 } | 821 } |
811 | 822 |
812 // Runs on the handler thread | 823 // Runs on the handler thread |
813 void DevToolsHttpHandlerImpl::Teardown() { | 824 void DevToolsHttpHandlerImpl::Teardown() { |
814 server_.reset(NULL); | 825 server_.reset(); |
815 } | 826 } |
816 | 827 |
817 // Runs on FILE thread to make sure that it is serialized against | 828 // Runs on FILE thread to make sure that it is serialized against |
818 // {Start|Stop}HandlerThread and to allow calling pthread_join. | 829 // {Start|Stop}HandlerThread and to allow calling pthread_join. |
819 void DevToolsHttpHandlerImpl::StopHandlerThread() { | 830 void DevToolsHttpHandlerImpl::StopHandlerThread() { |
820 if (!thread_->message_loop()) | 831 if (!thread_->message_loop()) |
821 return; | 832 return; |
822 thread_->message_loop()->PostTask( | 833 thread_->message_loop()->PostTask( |
823 FROM_HERE, | 834 FROM_HERE, |
824 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); | 835 base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 id.c_str(), | 980 id.c_str(), |
970 host); | 981 host); |
971 dictionary->SetString( | 982 dictionary->SetString( |
972 kTargetDevtoolsFrontendUrlField, devtools_frontend_url); | 983 kTargetDevtoolsFrontendUrlField, devtools_frontend_url); |
973 } | 984 } |
974 | 985 |
975 return dictionary; | 986 return dictionary; |
976 } | 987 } |
977 | 988 |
978 } // namespace content | 989 } // namespace content |
OLD | NEW |