OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 "components/nacl/browser/nacl_browser.h" | 5 #include "components/nacl/browser/nacl_browser.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/files/file_proxy.h" | 9 #include "base/files/file_proxy.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 } else { | 265 } else { |
266 LOG(ERROR) << "Failed to open NaCl IRT file \"" | 266 LOG(ERROR) << "Failed to open NaCl IRT file \"" |
267 << irt_filepath_.LossyDisplayName() | 267 << irt_filepath_.LossyDisplayName() |
268 << "\": " << error_code; | 268 << "\": " << error_code; |
269 MarkAsFailed(); | 269 MarkAsFailed(); |
270 } | 270 } |
271 irt_state_ = NaClResourceReady; | 271 irt_state_ = NaClResourceReady; |
272 CheckWaiting(); | 272 CheckWaiting(); |
273 } | 273 } |
274 | 274 |
275 void NaClBrowser::FireGdbDebugStubPortOpened(int port) { | 275 void NaClBrowser::SetProcessGdbDebugStubPort(int process_id, int port) { |
276 content::BrowserThread::PostTask( | 276 gdb_debug_stub_port_map_[process_id] = port; |
277 content::BrowserThread::IO, | 277 if (port != kGdbDebugStubPortUnknown && |
278 FROM_HERE, | 278 !debug_stub_port_listener_.is_null()) { |
279 base::Bind(debug_stub_port_listener_, port)); | 279 content::BrowserThread::PostTask( |
280 } | 280 content::BrowserThread::IO, |
281 | 281 FROM_HERE, |
282 bool NaClBrowser::HasGdbDebugStubPortListener() { | 282 base::Bind(debug_stub_port_listener_, port)); |
283 return !debug_stub_port_listener_.is_null(); | 283 } |
284 } | 284 } |
285 | 285 |
286 void NaClBrowser::SetGdbDebugStubPortListener( | 286 void NaClBrowser::SetGdbDebugStubPortListener( |
287 base::Callback<void(int)> listener) { | 287 base::Callback<void(int)> listener) { |
288 debug_stub_port_listener_ = listener; | 288 debug_stub_port_listener_ = listener; |
289 } | 289 } |
290 | 290 |
291 void NaClBrowser::ClearGdbDebugStubPortListener() { | 291 void NaClBrowser::ClearGdbDebugStubPortListener() { |
292 debug_stub_port_listener_.Reset(); | 292 debug_stub_port_listener_.Reset(); |
293 } | 293 } |
294 | 294 |
| 295 int NaClBrowser::GetProcessGdbDebugStubPort(int process_id) { |
| 296 GdbDebugStubPortMap::iterator i = gdb_debug_stub_port_map_.find(process_id); |
| 297 if (i != gdb_debug_stub_port_map_.end()) { |
| 298 return i->second; |
| 299 } |
| 300 return kGdbDebugStubPortUnused; |
| 301 } |
| 302 |
295 void NaClBrowser::InitValidationCacheFilePath() { | 303 void NaClBrowser::InitValidationCacheFilePath() { |
296 // Determine where the validation cache resides in the file system. It | 304 // Determine where the validation cache resides in the file system. It |
297 // exists in Chrome's cache directory and is not tied to any specific | 305 // exists in Chrome's cache directory and is not tied to any specific |
298 // profile. | 306 // profile. |
299 // Start by finding the user data directory. | 307 // Start by finding the user data directory. |
300 base::FilePath user_data_dir; | 308 base::FilePath user_data_dir; |
301 if (!browser_delegate_->GetUserDirectory(&user_data_dir)) { | 309 if (!browser_delegate_->GetUserDirectory(&user_data_dir)) { |
302 RunWithoutValidationCache(); | 310 RunWithoutValidationCache(); |
303 return; | 311 return; |
304 } | 312 } |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 // The task is sequenced so that multiple writes happen in order. | 535 // The task is sequenced so that multiple writes happen in order. |
528 content::BrowserThread::PostBlockingPoolSequencedTask( | 536 content::BrowserThread::PostBlockingPoolSequencedTask( |
529 kValidationCacheSequenceName, | 537 kValidationCacheSequenceName, |
530 FROM_HERE, | 538 FROM_HERE, |
531 base::Bind(WriteCache, validation_cache_file_path_, | 539 base::Bind(WriteCache, validation_cache_file_path_, |
532 base::Owned(pickle))); | 540 base::Owned(pickle))); |
533 } | 541 } |
534 validation_cache_is_modified_ = false; | 542 validation_cache_is_modified_ = false; |
535 } | 543 } |
536 | 544 |
| 545 void NaClBrowser::OnProcessEnd(int process_id) { |
| 546 gdb_debug_stub_port_map_.erase(process_id); |
| 547 } |
| 548 |
537 void NaClBrowser::OnProcessCrashed() { | 549 void NaClBrowser::OnProcessCrashed() { |
538 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 550 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
539 if (crash_times_.size() == kMaxCrashesPerInterval) { | 551 if (crash_times_.size() == kMaxCrashesPerInterval) { |
540 crash_times_.pop_front(); | 552 crash_times_.pop_front(); |
541 } | 553 } |
542 base::Time time = base::Time::Now(); | 554 base::Time time = base::Time::Now(); |
543 crash_times_.push_back(time); | 555 crash_times_.push_back(time); |
544 } | 556 } |
545 | 557 |
546 bool NaClBrowser::IsThrottled() { | 558 bool NaClBrowser::IsThrottled() { |
547 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 559 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
548 if (crash_times_.size() != kMaxCrashesPerInterval) { | 560 if (crash_times_.size() != kMaxCrashesPerInterval) { |
549 return false; | 561 return false; |
550 } | 562 } |
551 base::TimeDelta delta = base::Time::Now() - crash_times_.front(); | 563 base::TimeDelta delta = base::Time::Now() - crash_times_.front(); |
552 return delta.InSeconds() <= kCrashesIntervalInSeconds; | 564 return delta.InSeconds() <= kCrashesIntervalInSeconds; |
553 } | 565 } |
554 | 566 |
555 } // namespace nacl | 567 } // namespace nacl |
OLD | NEW |