Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(797)

Unified Diff: chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc

Issue 2624463003: Address 2 crashes in download attribution code (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
index c621d8646ba7f5f3b369aefc720316f937644690..ed9ffecdd5a48f8234fd3792ee458abd4124dcc0 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc
@@ -194,7 +194,7 @@ SafeBrowsingNavigationObserverManager::IdentifyReferrerChainForDownload(
const GURL& target_url,
int target_tab_id,
int user_gesture_count_limit,
- std::vector<ReferrerChainEntry>* out_referrer_chain) {
+ ReferrerChain* out_referrer_chain) {
if (!target_url.is_valid())
return INVALID_URL;
@@ -225,7 +225,7 @@ SafeBrowsingNavigationObserverManager::IdentifyReferrerChainForPPAPIDownload(
int tab_id,
bool has_user_gesture,
int user_gesture_count_limit,
- std::vector<ReferrerChainEntry>* out_referrer_chain) {
+ ReferrerChain* out_referrer_chain) {
if (!initiating_frame_url.is_valid())
return INVALID_URL;
@@ -397,7 +397,6 @@ NavigationEvent* SafeBrowsingNavigationObserverManager::FindNavigationEvent(
// the vector in reverse order to get the latest match.
for (auto rit = it->second.rbegin(); rit != it->second.rend(); ++rit) {
// If tab id is not valid, we only compare url, otherwise we compare both.
- if (rit->destination_url == search_url)
Jialiu Lin 2017/01/09 23:23:04 not sure why this line slipped through last CL...
Nathan Parker 2017/01/10 01:25:13 Weird! At least it's a NOOP. :-)
if (rit->destination_url == search_url &&
(target_tab_id == -1 || rit->target_tab_id == target_tab_id)) {
// If both source_url and source_main_frame_url are empty, and this
@@ -413,6 +412,8 @@ NavigationEvent* SafeBrowsingNavigationObserverManager::FindNavigationEvent(
FindNavigationEvent(rit->original_request_url,
GURL(),
rit->target_tab_id);
+ if (!retargeting_nav_event)
Nathan Parker 2017/01/10 01:25:13 Does this imply has_server_redirect was wrong?
Jialiu Lin 2017/01/10 02:15:12 Not necessarily. For some cases, previous Navigati
+ return nullptr;
// Adjust retargeting navigation event's attributes.
retargeting_nav_event->has_server_redirect = true;
retargeting_nav_event->destination_url = search_url;
@@ -429,28 +430,29 @@ NavigationEvent* SafeBrowsingNavigationObserverManager::FindNavigationEvent(
}
void SafeBrowsingNavigationObserverManager::AddToReferrerChain(
- std::vector<ReferrerChainEntry>* referrer_chain,
+ ReferrerChain* referrer_chain,
NavigationEvent* nav_event,
ReferrerChainEntry::URLType type) {
- ReferrerChainEntry referrer_chain_entry;
- referrer_chain_entry.set_url(nav_event->destination_url.spec());
- referrer_chain_entry.set_type(type);
+ std::unique_ptr<ReferrerChainEntry> referrer_chain_entry =
+ base::MakeUnique<ReferrerChainEntry>();
+ referrer_chain_entry->set_url(nav_event->destination_url.spec());
+ referrer_chain_entry->set_type(type);
auto ip_it = host_to_ip_map_.find(nav_event->destination_url.host());
if (ip_it != host_to_ip_map_.end()) {
for (ResolvedIPAddress entry : ip_it->second) {
- referrer_chain_entry.add_ip_addresses(entry.ip);
+ referrer_chain_entry->add_ip_addresses(entry.ip);
}
}
// Since we only track navigation to landing referrer, we will not log the
// referrer of the landing referrer page.
if (type != ReferrerChainEntry::LANDING_REFERRER) {
- referrer_chain_entry.set_referrer_url(nav_event->source_url.spec());
- referrer_chain_entry.set_referrer_main_frame_url(
+ referrer_chain_entry->set_referrer_url(nav_event->source_url.spec());
+ referrer_chain_entry->set_referrer_main_frame_url(
nav_event->source_main_frame_url.spec());
}
- referrer_chain_entry.set_is_retargeting(nav_event->source_tab_id !=
+ referrer_chain_entry->set_is_retargeting(nav_event->source_tab_id !=
nav_event->target_tab_id);
- referrer_chain_entry.set_navigation_time_msec(
+ referrer_chain_entry->set_navigation_time_msec(
nav_event->last_updated.ToJavaTime());
referrer_chain->push_back(std::move(referrer_chain_entry));
}
@@ -459,7 +461,7 @@ void SafeBrowsingNavigationObserverManager::GetRemainingReferrerChain(
NavigationEvent* last_nav_event_traced,
int current_user_gesture_count,
int user_gesture_count_limit,
- std::vector<ReferrerChainEntry>* out_referrer_chain,
+ ReferrerChain* out_referrer_chain,
SafeBrowsingNavigationObserverManager::AttributionResult* out_result) {
while (current_user_gesture_count < user_gesture_count_limit) {

Powered by Google App Engine
This is Rietveld 408576698