| Index: chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc
|
| diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc
|
| deleted file mode 100644
|
| index fea1e3b7ca7b94cd02d9cc045f4ddb5432a99d57..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc
|
| +++ /dev/null
|
| @@ -1,234 +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.h"
|
| -
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/time/time.h"
|
| -#include "chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h"
|
| -#include "chrome/browser/sessions/session_tab_helper.h"
|
| -#include "content/public/browser/navigation_handle.h"
|
| -#include "content/public/browser/render_frame_host.h"
|
| -#include "content/public/browser/resource_request_details.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/common/resource_type.h"
|
| -
|
| -using content::WebContents;
|
| -
|
| -namespace {
|
| -const char kWebContentsUserDataKey[] =
|
| - "web_contents_safe_browsing_navigation_observer";
|
| -} // namespace
|
| -
|
| -namespace safe_browsing {
|
| -
|
| -// SafeBrowsingNavigationObserver::NavigationEvent-----------------------------
|
| -NavigationEvent::NavigationEvent()
|
| - : source_url(),
|
| - source_main_frame_url(),
|
| - original_request_url(),
|
| - destination_url(),
|
| - source_tab_id(-1),
|
| - target_tab_id(-1),
|
| - frame_id(-1),
|
| - last_updated(base::Time::Now()),
|
| - is_user_initiated(false),
|
| - has_committed(false),
|
| - has_server_redirect(false) {}
|
| -
|
| -NavigationEvent::NavigationEvent(NavigationEvent&& nav_event)
|
| - : source_url(std::move(nav_event.source_url)),
|
| - source_main_frame_url(std::move(nav_event.source_main_frame_url)),
|
| - original_request_url(std::move(nav_event.original_request_url)),
|
| - destination_url(std::move(nav_event.destination_url)),
|
| - source_tab_id(std::move(nav_event.source_tab_id)),
|
| - target_tab_id(std::move(nav_event.target_tab_id)),
|
| - frame_id(nav_event.frame_id),
|
| - last_updated(nav_event.last_updated),
|
| - is_user_initiated(nav_event.is_user_initiated),
|
| - has_committed(nav_event.has_committed),
|
| - has_server_redirect(nav_event.has_server_redirect) {}
|
| -
|
| -NavigationEvent& NavigationEvent::operator=(NavigationEvent&& nav_event) {
|
| - source_url = std::move(nav_event.source_url);
|
| - source_main_frame_url = std::move(nav_event.source_main_frame_url);
|
| - original_request_url = std::move(nav_event.original_request_url);
|
| - destination_url = std::move(nav_event.destination_url);
|
| - source_tab_id = nav_event.source_tab_id;
|
| - target_tab_id = nav_event.target_tab_id;
|
| - frame_id = nav_event.frame_id;
|
| - last_updated = nav_event.last_updated;
|
| - is_user_initiated = nav_event.is_user_initiated;
|
| - has_committed = nav_event.has_committed;
|
| - has_server_redirect = nav_event.has_server_redirect;
|
| - return *this;
|
| -}
|
| -
|
| -NavigationEvent::~NavigationEvent() {}
|
| -
|
| -// SafeBrowsingNavigationObserver --------------------------------------------
|
| -
|
| -// static
|
| -void SafeBrowsingNavigationObserver::MaybeCreateForWebContents(
|
| - content::WebContents* web_contents) {
|
| - if (FromWebContents(web_contents))
|
| - return;
|
| - // TODO(jialiul): This method will be called by TabHelpers::AttachTabHelpers.
|
| - // Complete this method when the entire class is ready.
|
| - NOTIMPLEMENTED();
|
| -}
|
| -
|
| -// static
|
| -SafeBrowsingNavigationObserver* SafeBrowsingNavigationObserver::FromWebContents(
|
| - content::WebContents* web_contents) {
|
| - return static_cast<SafeBrowsingNavigationObserver*>(
|
| - web_contents->GetUserData(kWebContentsUserDataKey));
|
| -}
|
| -
|
| -SafeBrowsingNavigationObserver::SafeBrowsingNavigationObserver(
|
| - content::WebContents* contents,
|
| - const scoped_refptr<SafeBrowsingNavigationObserverManager>& manager)
|
| - : content::WebContentsObserver(contents),
|
| - manager_(manager),
|
| - has_user_gesture_(false),
|
| - last_user_gesture_timestamp_(base::Time()) {}
|
| -
|
| -SafeBrowsingNavigationObserver::~SafeBrowsingNavigationObserver() {}
|
| -
|
| -// Called when a navigation starts in the WebContents. |navigation_handle|
|
| -// parameter is unique to this navigation, which will appear in the following
|
| -// DidRedirectNavigation, and DidFinishNavigation too.
|
| -void SafeBrowsingNavigationObserver::DidStartNavigation(
|
| - content::NavigationHandle* navigation_handle) {
|
| - NavigationEvent nav_event;
|
| - auto it = navigation_handle_map_.find(navigation_handle);
|
| - // It is possible to see multiple DidStartNavigation(..) with the same
|
| - // navigation_handle (e.g. cross-process transfer). If that's the case,
|
| - // we need to copy the is_user_initiated field.
|
| - if (it != navigation_handle_map_.end()) {
|
| - nav_event.is_user_initiated = it->second.is_user_initiated;
|
| - } else {
|
| - // If this is the first time we see this navigation_handle, create a new
|
| - // NavigationEvent, and decide if it is triggered by user.
|
| - if ((has_user_gesture_ &&
|
| - !SafeBrowsingNavigationObserverManager::IsUserGestureExpired(
|
| - last_user_gesture_timestamp_)) ||
|
| - !navigation_handle->IsRendererInitiated()) {
|
| - nav_event.is_user_initiated = has_user_gesture_;
|
| - manager_->OnUserGestureConsumed(web_contents(),
|
| - last_user_gesture_timestamp_);
|
| - }
|
| - has_user_gesture_ = false;
|
| - }
|
| -
|
| - // All the other fields are reconstructed based on current content of
|
| - // navigation_handle.
|
| - nav_event.frame_id = navigation_handle->GetFrameTreeNodeId();
|
| -
|
| - // If there was a URL previously committed in the current RenderFrameHost,
|
| - // set it as the source url of this navigation. Otherwise, this is the
|
| - // first url going to commit in this frame. We set navigation_handle's URL as
|
| - // the source url.
|
| - // TODO(jialiul): source_url, source_tab_id, and source_main_frame_url may be
|
| - // incorrect when another frame is targeting this frame. Need to refine this
|
| - // logic after the true initiator details are added to NavigationHandle
|
| - // (https://crbug.com/651895).
|
| - content::RenderFrameHost* current_frame_host =
|
| - navigation_handle->GetWebContents()->FindFrameByFrameTreeNodeId(
|
| - nav_event.frame_id);
|
| - if (current_frame_host &&
|
| - current_frame_host->GetLastCommittedURL().is_valid()) {
|
| - nav_event.source_url = SafeBrowsingNavigationObserverManager::ClearEmptyRef(
|
| - current_frame_host->GetLastCommittedURL());
|
| - }
|
| - nav_event.original_request_url =
|
| - SafeBrowsingNavigationObserverManager::ClearEmptyRef(
|
| - navigation_handle->GetURL());
|
| - nav_event.destination_url = nav_event.original_request_url;
|
| -
|
| - nav_event.source_tab_id =
|
| - SessionTabHelper::IdForTab(navigation_handle->GetWebContents());
|
| -
|
| - if (navigation_handle->IsInMainFrame()) {
|
| - nav_event.source_main_frame_url = nav_event.source_url;
|
| - } else {
|
| - nav_event.source_main_frame_url =
|
| - SafeBrowsingNavigationObserverManager::ClearEmptyRef(
|
| - navigation_handle->GetWebContents()->GetLastCommittedURL());
|
| - }
|
| - navigation_handle_map_[navigation_handle] = std::move(nav_event);
|
| -}
|
| -
|
| -void SafeBrowsingNavigationObserver::DidRedirectNavigation(
|
| - content::NavigationHandle* navigation_handle) {
|
| - // We should have already seen this navigation_handle in DidStartNavigation.
|
| - if (navigation_handle_map_.find(navigation_handle) ==
|
| - navigation_handle_map_.end()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - NavigationEvent* nav_event = &navigation_handle_map_[navigation_handle];
|
| - nav_event->has_server_redirect = true;
|
| - nav_event->destination_url =
|
| - SafeBrowsingNavigationObserverManager::ClearEmptyRef(
|
| - navigation_handle->GetURL());
|
| - nav_event->last_updated = base::Time::Now();
|
| -}
|
| -
|
| -void SafeBrowsingNavigationObserver::DidFinishNavigation(
|
| - content::NavigationHandle* navigation_handle) {
|
| - if (navigation_handle_map_.find(navigation_handle) ==
|
| - navigation_handle_map_.end()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - // If it is an error page, we ignore this navigation.
|
| - if (navigation_handle->IsErrorPage()) {
|
| - navigation_handle_map_.erase(navigation_handle);
|
| - return;
|
| - }
|
| - NavigationEvent* nav_event = &navigation_handle_map_[navigation_handle];
|
| -
|
| - nav_event->has_committed = navigation_handle->HasCommitted();
|
| - nav_event->target_tab_id =
|
| - SessionTabHelper::IdForTab(navigation_handle->GetWebContents());
|
| - nav_event->last_updated = base::Time::Now();
|
| -
|
| - manager_->RecordNavigationEvent(nav_event->destination_url, nav_event);
|
| - navigation_handle_map_.erase(navigation_handle);
|
| -}
|
| -
|
| -void SafeBrowsingNavigationObserver::DidGetResourceResponseStart(
|
| - const content::ResourceRequestDetails& details) {
|
| - // We only care about main frame and sub frame.
|
| - if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME &&
|
| - details.resource_type != content::RESOURCE_TYPE_SUB_FRAME) {
|
| - return;
|
| - }
|
| - if (!details.url.is_valid() || details.socket_address.IsEmpty())
|
| - return;
|
| -
|
| - manager_->RecordHostToIpMapping(details.url.host(),
|
| - details.socket_address.host());
|
| -}
|
| -
|
| -void SafeBrowsingNavigationObserver::DidGetUserInteraction(
|
| - const blink::WebInputEvent::Type type) {
|
| - last_user_gesture_timestamp_ = base::Time::Now();
|
| - has_user_gesture_ = true;
|
| - // TODO (jialiul): Refine user gesture logic when DidOpenRequestedURL
|
| - // covers all retargetting cases.
|
| - manager_->RecordUserGestureForWebContents(web_contents(),
|
| - last_user_gesture_timestamp_);
|
| -}
|
| -
|
| -void SafeBrowsingNavigationObserver::WebContentsDestroyed() {
|
| - manager_->OnWebContentDestroyed(web_contents());
|
| - web_contents()->RemoveUserData(kWebContentsUserDataKey);
|
| - // web_contents is null after this function.
|
| -}
|
| -
|
| -} // namespace safe_browsing
|
|
|