| 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 | 
| deleted file mode 100644 | 
| index 14fdb02acfce05e181fb1fba65d93e5912671441..0000000000000000000000000000000000000000 | 
| --- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.cc | 
| +++ /dev/null | 
| @@ -1,169 +0,0 @@ | 
| -// Copyright 2016 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h" | 
| - | 
| -#include "base/memory/ptr_util.h" | 
| -#include "base/time/time.h" | 
| -#include "chrome/browser/chrome_notification_types.h" | 
| -#include "chrome/browser/safe_browsing/safe_browsing_navigation_observer.h" | 
| -#include "chrome/browser/sessions/session_tab_helper.h" | 
| -#include "chrome/browser/tab_contents/retargeting_details.h" | 
| -#include "content/public/browser/navigation_details.h" | 
| -#include "content/public/browser/notification_service.h" | 
| -#include "content/public/browser/notification_types.h" | 
| -#include "content/public/browser/render_frame_host.h" | 
| -#include "content/public/browser/render_process_host.h" | 
| -#include "content/public/browser/web_contents.h" | 
| - | 
| -using content::WebContents; | 
| - | 
| -namespace safe_browsing { | 
| - | 
| -// The expiration period of a user gesture. Any user gesture that happened 1.0 | 
| -// second ago will be considered as expired and not relevant to upcoming | 
| -// navigation events. | 
| -static const double kUserGestureTTLInSecond = 1.0; | 
| - | 
| -// static | 
| -bool SafeBrowsingNavigationObserverManager::IsUserGestureExpired( | 
| -    const base::Time& timestamp) { | 
| -  double now = base::Time::Now().ToDoubleT(); | 
| -  double timestamp_in_double = timestamp.ToDoubleT(); | 
| - | 
| -  if (now <= timestamp_in_double) | 
| -    return true; | 
| -  return (now - timestamp_in_double) > kUserGestureTTLInSecond; | 
| -} | 
| - | 
| -// static | 
| -GURL SafeBrowsingNavigationObserverManager::ClearEmptyRef(const GURL& url) { | 
| -  if (url.has_ref() && url.ref().empty()) { | 
| -    url::Replacements<char> replacements; | 
| -    replacements.ClearRef(); | 
| -    return url.ReplaceComponents(replacements); | 
| -  } | 
| -  return url; | 
| -} | 
| - | 
| -SafeBrowsingNavigationObserverManager::SafeBrowsingNavigationObserverManager() { | 
| -  registrar_.Add(this, chrome::NOTIFICATION_RETARGETING, | 
| -                 content::NotificationService::AllSources()); | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::RecordNavigationEvent( | 
| -    const GURL& nav_event_key, | 
| -    NavigationEvent* nav_event) { | 
| -  auto insertion_result = navigation_map_.insert( | 
| -      std::make_pair(nav_event_key, std::vector<NavigationEvent>())); | 
| - | 
| -  insertion_result.first->second.push_back(std::move(*nav_event)); | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::RecordUserGestureForWebContents( | 
| -    content::WebContents* web_contents, | 
| -    const base::Time& timestamp) { | 
| -  auto insertion_result = | 
| -      user_gesture_map_.insert(std::make_pair(web_contents, timestamp)); | 
| -  // Update the timestamp if entry already exists. | 
| -  if (!insertion_result.second) | 
| -    insertion_result.first->second = timestamp; | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::OnUserGestureConsumed( | 
| -    content::WebContents* web_contents, | 
| -    const base::Time& timestamp) { | 
| -  auto it = user_gesture_map_.find(web_contents); | 
| -  // Remove entry from |user_gesture_map_| as a user_gesture is consumed by | 
| -  // a navigation event. | 
| -  if (it != user_gesture_map_.end() && timestamp >= it->second) | 
| -    user_gesture_map_.erase(it); | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::RecordHostToIpMapping( | 
| -    const std::string& host, | 
| -    const std::string& ip) { | 
| -  auto insert_result = host_to_ip_map_.insert( | 
| -      std::make_pair(host, std::vector<ResolvedIPAddress>())); | 
| -  if (!insert_result.second) { | 
| -    // host_to_ip_map already contains this key. | 
| -    // If this IP is already in the vector, we update its timestamp. | 
| -    for (auto& vector_entry : insert_result.first->second) { | 
| -      if (vector_entry.ip == host) { | 
| -        vector_entry.timestamp = base::Time::Now(); | 
| -        return; | 
| -      } | 
| -    } | 
| -  } | 
| -  // If this is a new IP of this host, and we added to the end of the vector. | 
| -  insert_result.first->second.push_back( | 
| -      ResolvedIPAddress(base::Time::Now(), ip)); | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::OnWebContentDestroyed( | 
| -    content::WebContents* web_contents) { | 
| -  user_gesture_map_.erase(web_contents); | 
| -  // TODO (jialiul): Will add other clean up tasks shortly. | 
| -} | 
| - | 
| -SafeBrowsingNavigationObserverManager:: | 
| -    ~SafeBrowsingNavigationObserverManager() {} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::Observe( | 
| -    int type, | 
| -    const content::NotificationSource& source, | 
| -    const content::NotificationDetails& details) { | 
| -  if (type == chrome::NOTIFICATION_RETARGETING) | 
| -    RecordRetargeting(details); | 
| -} | 
| - | 
| -void SafeBrowsingNavigationObserverManager::RecordRetargeting( | 
| -    const content::NotificationDetails& details) { | 
| -  const RetargetingDetails* retargeting_detail = | 
| -      content::Details<const RetargetingDetails>(details).ptr(); | 
| -  DCHECK(retargeting_detail); | 
| -  content::WebContents* source_contents = | 
| -      retargeting_detail->source_web_contents; | 
| -  content::WebContents* target_contents = | 
| -      retargeting_detail->target_web_contents; | 
| -  DCHECK(source_contents); | 
| -  DCHECK(target_contents); | 
| - | 
| -  content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( | 
| -      retargeting_detail->source_render_process_id, | 
| -      retargeting_detail->source_render_frame_id); | 
| -  // Remove the "#" at the end of URL, since it does not point to any actual | 
| -  // page fragment ID. | 
| -  GURL target_url = SafeBrowsingNavigationObserverManager::ClearEmptyRef( | 
| -      retargeting_detail->target_url); | 
| - | 
| -  NavigationEvent nav_event; | 
| -  if (rfh) { | 
| -    nav_event.source_url = SafeBrowsingNavigationObserverManager::ClearEmptyRef( | 
| -        rfh->GetLastCommittedURL()); | 
| -  } | 
| -  nav_event.source_tab_id = SessionTabHelper::IdForTab(source_contents); | 
| -  nav_event.source_main_frame_url = | 
| -      SafeBrowsingNavigationObserverManager::ClearEmptyRef( | 
| -          source_contents->GetLastCommittedURL()); | 
| -  nav_event.original_request_url = target_url; | 
| -  nav_event.destination_url = target_url; | 
| -  nav_event.target_tab_id = SessionTabHelper::IdForTab(target_contents); | 
| -  nav_event.frame_id = rfh ? rfh->GetFrameTreeNodeId() : -1; | 
| -  auto it = user_gesture_map_.find(source_contents); | 
| -  if (it != user_gesture_map_.end() && | 
| -      !SafeBrowsingNavigationObserverManager::IsUserGestureExpired( | 
| -          it->second)) { | 
| -    nav_event.is_user_initiated = true; | 
| -    OnUserGestureConsumed(it->first, it->second); | 
| -  } else { | 
| -    nav_event.is_user_initiated = false; | 
| -  } | 
| - | 
| -  auto insertion_result = navigation_map_.insert( | 
| -      std::make_pair(target_url, std::vector<NavigationEvent>())); | 
| -  insertion_result.first->second.push_back(std::move(nav_event)); | 
| -} | 
| - | 
| -}  // namespace safe_browsing | 
|  |