| 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 "chrome/browser/prerender/prerender_manager.h" | 5 #include "chrome/browser/prerender/prerender_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <functional> | 10 #include <functional> |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 }; | 159 }; |
| 160 | 160 |
| 161 PrerenderManagerObserver::~PrerenderManagerObserver() {} | 161 PrerenderManagerObserver::~PrerenderManagerObserver() {} |
| 162 | 162 |
| 163 // static | 163 // static |
| 164 int PrerenderManager::prerenders_per_session_count_ = 0; | 164 int PrerenderManager::prerenders_per_session_count_ = 0; |
| 165 | 165 |
| 166 // static | 166 // static |
| 167 PrerenderManager::PrerenderManagerMode PrerenderManager::mode_ = | 167 PrerenderManager::PrerenderManagerMode PrerenderManager::mode_ = |
| 168 PRERENDER_MODE_ENABLED; | 168 PRERENDER_MODE_ENABLED; |
| 169 PrerenderManager::PrerenderManagerMode PrerenderManager::instant_mode_ = |
| 170 PRERENDER_MODE_ENABLED; |
| 171 PrerenderManager::PrerenderManagerMode PrerenderManager::omnibox_mode_ = |
| 172 PRERENDER_MODE_ENABLED; |
| 169 | 173 |
| 170 struct PrerenderManager::NavigationRecord { | 174 struct PrerenderManager::NavigationRecord { |
| 171 NavigationRecord(const GURL& url, base::TimeTicks time, Origin origin) | 175 NavigationRecord(const GURL& url, base::TimeTicks time, Origin origin) |
| 172 : url(url), time(time), origin(origin) {} | 176 : url(url), time(time), origin(origin) {} |
| 173 | 177 |
| 174 GURL url; | 178 GURL url; |
| 175 base::TimeTicks time; | 179 base::TimeTicks time; |
| 176 Origin origin; | 180 Origin origin; |
| 177 }; | 181 }; |
| 178 | 182 |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 } | 615 } |
| 612 histograms_->RecordPerceivedFirstContentfulPaintStatus( | 616 histograms_->RecordPerceivedFirstContentfulPaintStatus( |
| 613 tab_helper->origin(), fcp_recorded, was_hidden); | 617 tab_helper->origin(), fcp_recorded, was_hidden); |
| 614 | 618 |
| 615 for (auto& observer : observers_) { | 619 for (auto& observer : observers_) { |
| 616 observer->OnFirstContentfulPaint(); | 620 observer->OnFirstContentfulPaint(); |
| 617 } | 621 } |
| 618 } | 622 } |
| 619 | 623 |
| 620 // static | 624 // static |
| 621 PrerenderManager::PrerenderManagerMode PrerenderManager::GetMode() { | 625 PrerenderManager::PrerenderManagerMode PrerenderManager::GetMode( |
| 622 return mode_; | 626 Origin origin) { |
| 627 switch (origin) { |
| 628 case ORIGIN_INSTANT: |
| 629 return instant_mode_; |
| 630 case ORIGIN_OMNIBOX: |
| 631 return omnibox_mode_; |
| 632 default: |
| 633 return mode_; |
| 634 } |
| 623 } | 635 } |
| 624 | 636 |
| 625 // static | 637 // static |
| 626 void PrerenderManager::SetMode(PrerenderManagerMode mode) { | 638 void PrerenderManager::SetMode(PrerenderManagerMode mode) { |
| 627 mode_ = mode; | 639 mode_ = mode; |
| 628 } | 640 } |
| 629 | 641 |
| 630 // static | 642 // static |
| 631 bool PrerenderManager::IsPrerenderingPossible() { | 643 void PrerenderManager::SetInstantMode(PrerenderManagerMode mode) { |
| 632 return GetMode() != PRERENDER_MODE_DISABLED; | 644 instant_mode_ = mode; |
| 645 } |
| 646 |
| 647 // static |
| 648 void PrerenderManager::SetOmniboxMode(PrerenderManagerMode mode) { |
| 649 omnibox_mode_ = mode; |
| 650 } |
| 651 |
| 652 // static |
| 653 bool PrerenderManager::IsAnyPrerenderingPossible() { |
| 654 return mode_ != PRERENDER_MODE_DISABLED || |
| 655 instant_mode_ != PRERENDER_MODE_DISABLED || |
| 656 omnibox_mode_ != PRERENDER_MODE_DISABLED; |
| 633 } | 657 } |
| 634 | 658 |
| 635 // static | 659 // static |
| 636 bool PrerenderManager::IsNoStatePrefetch(Origin origin) { | 660 bool PrerenderManager::IsNoStatePrefetch(Origin origin) { |
| 637 return !IsPrerenderingForced(origin) && | 661 return !IsPrerenderingForced(origin) && |
| 638 GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH; | 662 GetMode(origin) == PRERENDER_MODE_NOSTATE_PREFETCH; |
| 639 } | 663 } |
| 640 | 664 |
| 641 // static | 665 // static |
| 642 bool PrerenderManager::IsSimpleLoadExperiment(Origin origin) { | 666 bool PrerenderManager::IsSimpleLoadExperiment(Origin origin) { |
| 643 return !IsPrerenderingForced(origin) && | 667 return !IsPrerenderingForced(origin) && |
| 644 GetMode() == PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT; | 668 GetMode(origin) == PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT; |
| 645 } | 669 } |
| 646 | 670 |
| 647 bool PrerenderManager::IsWebContentsPrerendering( | 671 bool PrerenderManager::IsWebContentsPrerendering( |
| 648 const WebContents* web_contents, | 672 const WebContents* web_contents, |
| 649 Origin* origin) const { | 673 Origin* origin) const { |
| 650 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 674 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 651 PrerenderContents* prerender_contents = GetPrerenderContents(web_contents); | 675 PrerenderContents* prerender_contents = GetPrerenderContents(web_contents); |
| 652 if (!prerender_contents) | 676 if (!prerender_contents) |
| 653 return false; | 677 return false; |
| 654 | 678 |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 PrerenderContents* prerender_contents = GetPrerenderContents(tab); | 1343 PrerenderContents* prerender_contents = GetPrerenderContents(tab); |
| 1320 if (!prerender_contents) | 1344 if (!prerender_contents) |
| 1321 return; | 1345 return; |
| 1322 | 1346 |
| 1323 prerender_contents->Destroy(FINAL_STATUS_CREATING_AUDIO_STREAM); | 1347 prerender_contents->Destroy(FINAL_STATUS_CREATING_AUDIO_STREAM); |
| 1324 } | 1348 } |
| 1325 | 1349 |
| 1326 void PrerenderManager::RecordNetworkBytes(Origin origin, | 1350 void PrerenderManager::RecordNetworkBytes(Origin origin, |
| 1327 bool used, | 1351 bool used, |
| 1328 int64_t prerender_bytes) { | 1352 int64_t prerender_bytes) { |
| 1329 if (!IsPrerenderingPossible()) | 1353 if (!IsAnyPrerenderingPossible()) |
| 1330 return; | 1354 return; |
| 1331 int64_t recent_profile_bytes = | 1355 int64_t recent_profile_bytes = |
| 1332 profile_network_bytes_ - last_recorded_profile_network_bytes_; | 1356 profile_network_bytes_ - last_recorded_profile_network_bytes_; |
| 1333 last_recorded_profile_network_bytes_ = profile_network_bytes_; | 1357 last_recorded_profile_network_bytes_ = profile_network_bytes_; |
| 1334 DCHECK_GE(recent_profile_bytes, 0); | 1358 DCHECK_GE(recent_profile_bytes, 0); |
| 1335 histograms_->RecordNetworkBytes( | 1359 histograms_->RecordNetworkBytes( |
| 1336 origin, used, prerender_bytes, recent_profile_bytes); | 1360 origin, used, prerender_bytes, recent_profile_bytes); |
| 1337 } | 1361 } |
| 1338 | 1362 |
| 1339 bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const { | 1363 bool PrerenderManager::IsPrerenderSilenceExperiment(Origin origin) const { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1399 if (origin == ORIGIN_EXTERNAL_REQUEST_FORCED_PRERENDER && | 1423 if (origin == ORIGIN_EXTERNAL_REQUEST_FORCED_PRERENDER && |
| 1400 prediction_status == NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK) { | 1424 prediction_status == NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK) { |
| 1401 return NetworkPredictionStatus::ENABLED; | 1425 return NetworkPredictionStatus::ENABLED; |
| 1402 } | 1426 } |
| 1403 return prediction_status; | 1427 return prediction_status; |
| 1404 } | 1428 } |
| 1405 | 1429 |
| 1406 void PrerenderManager::AddProfileNetworkBytesIfEnabled(int64_t bytes) { | 1430 void PrerenderManager::AddProfileNetworkBytesIfEnabled(int64_t bytes) { |
| 1407 DCHECK_GE(bytes, 0); | 1431 DCHECK_GE(bytes, 0); |
| 1408 if (GetPredictionStatus() == NetworkPredictionStatus::ENABLED && | 1432 if (GetPredictionStatus() == NetworkPredictionStatus::ENABLED && |
| 1409 IsPrerenderingPossible()) | 1433 IsAnyPrerenderingPossible()) |
| 1410 profile_network_bytes_ += bytes; | 1434 profile_network_bytes_ += bytes; |
| 1411 } | 1435 } |
| 1412 | 1436 |
| 1413 void PrerenderManager::AddPrerenderProcessHost( | 1437 void PrerenderManager::AddPrerenderProcessHost( |
| 1414 content::RenderProcessHost* process_host) { | 1438 content::RenderProcessHost* process_host) { |
| 1415 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1439 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1416 DCHECK(prerender_process_hosts_.find(process_host) == | 1440 DCHECK(prerender_process_hosts_.find(process_host) == |
| 1417 prerender_process_hosts_.end()); | 1441 prerender_process_hosts_.end()); |
| 1418 prerender_process_hosts_.insert(process_host); | 1442 prerender_process_hosts_.insert(process_host); |
| 1419 process_host->AddObserver(this); | 1443 process_host->AddObserver(this); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1439 return weak_factory_.GetWeakPtr(); | 1463 return weak_factory_.GetWeakPtr(); |
| 1440 } | 1464 } |
| 1441 | 1465 |
| 1442 void PrerenderManager::SetPrerenderContentsFactoryForTest( | 1466 void PrerenderManager::SetPrerenderContentsFactoryForTest( |
| 1443 PrerenderContents::Factory* prerender_contents_factory) { | 1467 PrerenderContents::Factory* prerender_contents_factory) { |
| 1444 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1468 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1445 prerender_contents_factory_.reset(prerender_contents_factory); | 1469 prerender_contents_factory_.reset(prerender_contents_factory); |
| 1446 } | 1470 } |
| 1447 | 1471 |
| 1448 } // namespace prerender | 1472 } // namespace prerender |
| OLD | NEW |