| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 | 5 |
| 6 //------------------------------------------------------------------------------ | 6 //------------------------------------------------------------------------------ |
| 7 // Description of the life cycle of a instance of MetricsService. | 7 // Description of the life cycle of a instance of MetricsService. |
| 8 // | 8 // |
| 9 // OVERVIEW | 9 // OVERVIEW |
| 10 // | 10 // |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 // This class provides HTTP request context information for metrics upload | 130 // This class provides HTTP request context information for metrics upload |
| 131 // requests initiated by ChromeFrame. | 131 // requests initiated by ChromeFrame. |
| 132 class ChromeFrameUploadRequestContext : public URLRequestContext { | 132 class ChromeFrameUploadRequestContext : public URLRequestContext { |
| 133 public: | 133 public: |
| 134 explicit ChromeFrameUploadRequestContext(MessageLoop* io_loop) | 134 explicit ChromeFrameUploadRequestContext(MessageLoop* io_loop) |
| 135 : io_loop_(io_loop) { | 135 : io_loop_(io_loop) { |
| 136 Initialize(); | 136 Initialize(); |
| 137 } | 137 } |
| 138 | 138 |
| 139 ~ChromeFrameUploadRequestContext() { | 139 ~ChromeFrameUploadRequestContext() { |
| 140 DLOG(INFO) << __FUNCTION__; | 140 DVLOG(1) << __FUNCTION__; |
| 141 delete http_transaction_factory_; | 141 delete http_transaction_factory_; |
| 142 delete http_auth_handler_factory_; | 142 delete http_auth_handler_factory_; |
| 143 } | 143 } |
| 144 | 144 |
| 145 void Initialize() { | 145 void Initialize() { |
| 146 user_agent_ = http_utils::GetDefaultUserAgent(); | 146 user_agent_ = http_utils::GetDefaultUserAgent(); |
| 147 user_agent_ = http_utils::AddChromeFrameToUserAgentValue( | 147 user_agent_ = http_utils::AddChromeFrameToUserAgentValue( |
| 148 user_agent_); | 148 user_agent_); |
| 149 | 149 |
| 150 host_resolver_ = | 150 host_resolver_ = |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 | 211 |
| 212 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() { | 212 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() { |
| 213 if (!io_message_loop_proxy_.get()) { | 213 if (!io_message_loop_proxy_.get()) { |
| 214 io_message_loop_proxy_ = base::MessageLoopProxy::CreateForCurrentThread(); | 214 io_message_loop_proxy_ = base::MessageLoopProxy::CreateForCurrentThread(); |
| 215 } | 215 } |
| 216 return io_message_loop_proxy_; | 216 return io_message_loop_proxy_; |
| 217 } | 217 } |
| 218 | 218 |
| 219 private: | 219 private: |
| 220 ~ChromeFrameUploadRequestContextGetter() { | 220 ~ChromeFrameUploadRequestContextGetter() { |
| 221 DLOG(INFO) << __FUNCTION__; | 221 DVLOG(1) << __FUNCTION__; |
| 222 } | 222 } |
| 223 | 223 |
| 224 scoped_refptr<URLRequestContext> context_; | 224 scoped_refptr<URLRequestContext> context_; |
| 225 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; | 225 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; |
| 226 MessageLoop* io_loop_; | 226 MessageLoop* io_loop_; |
| 227 }; | 227 }; |
| 228 | 228 |
| 229 // This class provides functionality to upload the ChromeFrame UMA data to the | 229 // This class provides functionality to upload the ChromeFrame UMA data to the |
| 230 // server. An instance of this class is created whenever we have data to be | 230 // server. An instance of this class is created whenever we have data to be |
| 231 // uploaded to the server. | 231 // uploaded to the server. |
| 232 class ChromeFrameMetricsDataUploader | 232 class ChromeFrameMetricsDataUploader |
| 233 : public URLFetcher::Delegate, | 233 : public URLFetcher::Delegate, |
| 234 public base::RefCountedThreadSafe<ChromeFrameMetricsDataUploader>, | 234 public base::RefCountedThreadSafe<ChromeFrameMetricsDataUploader>, |
| 235 public CWindowImpl<ChromeFrameMetricsDataUploader>, | 235 public CWindowImpl<ChromeFrameMetricsDataUploader>, |
| 236 public TaskMarshallerThroughWindowsMessages< | 236 public TaskMarshallerThroughWindowsMessages< |
| 237 ChromeFrameMetricsDataUploader> { | 237 ChromeFrameMetricsDataUploader> { |
| 238 public: | 238 public: |
| 239 BEGIN_MSG_MAP(ChromeFrameMetricsDataUploader) | 239 BEGIN_MSG_MAP(ChromeFrameMetricsDataUploader) |
| 240 CHAIN_MSG_MAP( | 240 CHAIN_MSG_MAP( |
| 241 TaskMarshallerThroughWindowsMessages<ChromeFrameMetricsDataUploader>) | 241 TaskMarshallerThroughWindowsMessages<ChromeFrameMetricsDataUploader>) |
| 242 END_MSG_MAP() | 242 END_MSG_MAP() |
| 243 | 243 |
| 244 ChromeFrameMetricsDataUploader() | 244 ChromeFrameMetricsDataUploader() |
| 245 : fetcher_(NULL) { | 245 : fetcher_(NULL) { |
| 246 DLOG(INFO) << __FUNCTION__; | 246 DVLOG(1) << __FUNCTION__; |
| 247 creator_thread_id_ = PlatformThread::CurrentId(); | 247 creator_thread_id_ = PlatformThread::CurrentId(); |
| 248 } | 248 } |
| 249 | 249 |
| 250 ~ChromeFrameMetricsDataUploader() { | 250 ~ChromeFrameMetricsDataUploader() { |
| 251 DLOG(INFO) << __FUNCTION__; | 251 DVLOG(1) << __FUNCTION__; |
| 252 DCHECK(creator_thread_id_ == PlatformThread::CurrentId()); | 252 DCHECK(creator_thread_id_ == PlatformThread::CurrentId()); |
| 253 } | 253 } |
| 254 | 254 |
| 255 virtual void OnFinalMessage(HWND wnd) { | 255 virtual void OnFinalMessage(HWND wnd) { |
| 256 Release(); | 256 Release(); |
| 257 } | 257 } |
| 258 | 258 |
| 259 bool Initialize() { | 259 bool Initialize() { |
| 260 bool ret = false; | 260 bool ret = false; |
| 261 | 261 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 fetcher_->Start(); | 323 fetcher_->Start(); |
| 324 } | 324 } |
| 325 | 325 |
| 326 // URLFetcher::Delegate | 326 // URLFetcher::Delegate |
| 327 virtual void OnURLFetchComplete(const URLFetcher* source, | 327 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 328 const GURL& url, | 328 const GURL& url, |
| 329 const URLRequestStatus& status, | 329 const URLRequestStatus& status, |
| 330 int response_code, | 330 int response_code, |
| 331 const ResponseCookies& cookies, | 331 const ResponseCookies& cookies, |
| 332 const std::string& data) { | 332 const std::string& data) { |
| 333 DLOG(INFO) << __FUNCTION__ | 333 DVLOG(1) << __FUNCTION__ << base::StringPrintf( |
| 334 << base::StringPrintf( | 334 ": url : %hs, status:%d, response code: %d\n", url.spec().c_str(), |
| 335 ": url : %hs, status:%d, response code: %d\n", | 335 status.status(), response_code); |
| 336 url.spec().c_str(), status.status(), | |
| 337 response_code); | |
| 338 delete fetcher_; | 336 delete fetcher_; |
| 339 fetcher_ = NULL; | 337 fetcher_ = NULL; |
| 340 | 338 |
| 341 PostTask(FROM_HERE, | 339 PostTask(FROM_HERE, |
| 342 NewRunnableMethod(this, | 340 NewRunnableMethod(this, |
| 343 &ChromeFrameMetricsDataUploader::Uninitialize)); | 341 &ChromeFrameMetricsDataUploader::Uninitialize)); |
| 344 } | 342 } |
| 345 | 343 |
| 346 private: | 344 private: |
| 347 URLFetcher* fetcher_; | 345 URLFetcher* fetcher_; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 WriteInto(&guid_string, kGUIDSize), kGUIDSize); | 440 WriteInto(&guid_string, kGUIDSize), kGUIDSize); |
| 443 DCHECK(result == kGUIDSize); | 441 DCHECK(result == kGUIDSize); |
| 444 return WideToUTF8(guid_string.substr(1, guid_string.length() - 2)); | 442 return WideToUTF8(guid_string.substr(1, guid_string.length() - 2)); |
| 445 } | 443 } |
| 446 | 444 |
| 447 // static | 445 // static |
| 448 void CALLBACK MetricsService::TransmissionTimerProc(HWND window, | 446 void CALLBACK MetricsService::TransmissionTimerProc(HWND window, |
| 449 unsigned int message, | 447 unsigned int message, |
| 450 unsigned int event_id, | 448 unsigned int event_id, |
| 451 unsigned int time) { | 449 unsigned int time) { |
| 452 DLOG(INFO) << "Transmission timer notified"; | 450 DVLOG(1) << "Transmission timer notified"; |
| 453 DCHECK(GetInstance() != NULL); | 451 DCHECK(GetInstance() != NULL); |
| 454 GetInstance()->UploadData(); | 452 GetInstance()->UploadData(); |
| 455 if (GetInstance()->initial_uma_upload_) { | 453 if (GetInstance()->initial_uma_upload_) { |
| 456 // If this is the first uma upload by this process then subsequent uma | 454 // If this is the first uma upload by this process then subsequent uma |
| 457 // uploads should occur once every 10 minutes(default). | 455 // uploads should occur once every 10 minutes(default). |
| 458 GetInstance()->initial_uma_upload_ = false; | 456 GetInstance()->initial_uma_upload_ = false; |
| 459 DCHECK(GetInstance()->transmission_timer_id_ != 0); | 457 DCHECK(GetInstance()->transmission_timer_id_ != 0); |
| 460 SetTimer(NULL, GetInstance()->transmission_timer_id_, | 458 SetTimer(NULL, GetInstance()->transmission_timer_id_, |
| 461 kMinMilliSecondsPerUMAUpload, | 459 kMinMilliSecondsPerUMAUpload, |
| 462 reinterpret_cast<TIMERPROC>(TransmissionTimerProc)); | 460 reinterpret_cast<TIMERPROC>(TransmissionTimerProc)); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 } | 554 } |
| 557 | 555 |
| 558 bool MetricsService::UploadData() { | 556 bool MetricsService::UploadData() { |
| 559 DCHECK_EQ(thread_, PlatformThread::CurrentId()); | 557 DCHECK_EQ(thread_, PlatformThread::CurrentId()); |
| 560 | 558 |
| 561 if (!GetInstance()->TransmissionPermitted()) | 559 if (!GetInstance()->TransmissionPermitted()) |
| 562 return false; | 560 return false; |
| 563 | 561 |
| 564 static long currently_uploading = 0; | 562 static long currently_uploading = 0; |
| 565 if (InterlockedCompareExchange(¤tly_uploading, 1, 0)) { | 563 if (InterlockedCompareExchange(¤tly_uploading, 1, 0)) { |
| 566 DLOG(INFO) << "Contention for uploading metrics data. Backing off"; | 564 DVLOG(1) << "Contention for uploading metrics data. Backing off"; |
| 567 return false; | 565 return false; |
| 568 } | 566 } |
| 569 | 567 |
| 570 std::string pending_log_text = PrepareLogSubmissionString(); | 568 std::string pending_log_text = PrepareLogSubmissionString(); |
| 571 DCHECK(!pending_log_text.empty()); | 569 DCHECK(!pending_log_text.empty()); |
| 572 | 570 |
| 573 // Allow security conscious users to see all metrics logs that we send. | 571 // Allow security conscious users to see all metrics logs that we send. |
| 574 LOG(INFO) << "METRICS LOG: " << pending_log_text; | 572 VLOG(1) << "METRICS LOG: " << pending_log_text; |
| 575 | 573 |
| 576 bool ret = true; | 574 bool ret = true; |
| 577 | 575 |
| 578 if (!Bzip2Compress(pending_log_text, &compressed_log_)) { | 576 if (!Bzip2Compress(pending_log_text, &compressed_log_)) { |
| 579 NOTREACHED() << "Failed to compress log for transmission."; | 577 NOTREACHED() << "Failed to compress log for transmission."; |
| 580 ret = false; | 578 ret = false; |
| 581 } else { | 579 } else { |
| 582 HRESULT hr = ChromeFrameMetricsDataUploader::UploadDataHelper( | 580 HRESULT hr = ChromeFrameMetricsDataUploader::UploadDataHelper( |
| 583 compressed_log_); | 581 compressed_log_); |
| 584 DCHECK(SUCCEEDED(hr)); | 582 DCHECK(SUCCEEDED(hr)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 599 version += "-F"; | 597 version += "-F"; |
| 600 if (!version_info.IsOfficialBuild()) | 598 if (!version_info.IsOfficialBuild()) |
| 601 version.append("-devel"); | 599 version.append("-devel"); |
| 602 return version; | 600 return version; |
| 603 } else { | 601 } else { |
| 604 NOTREACHED() << "Unable to retrieve version string."; | 602 NOTREACHED() << "Unable to retrieve version string."; |
| 605 } | 603 } |
| 606 | 604 |
| 607 return std::string(); | 605 return std::string(); |
| 608 } | 606 } |
| OLD | NEW |