// Copyright 2015 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 "components/history/content/browser/web_contents_top_sites_observer.h"

#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "components/history/core/browser/top_sites.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"

namespace history {

// static
void WebContentsTopSitesObserver::CreateForWebContents(
    content::WebContents* web_contents,
    TopSites* top_sites) {
  DCHECK(web_contents);
  if (!FromWebContents(web_contents)) {
    web_contents->SetUserData(UserDataKey(),
                              base::WrapUnique(new WebContentsTopSitesObserver(
                                  web_contents, top_sites)));
  }
}

WebContentsTopSitesObserver::WebContentsTopSitesObserver(
    content::WebContents* web_contents,
    TopSites* top_sites)
    : content::WebContentsObserver(web_contents), top_sites_(top_sites) {
}

WebContentsTopSitesObserver::~WebContentsTopSitesObserver() {
}

void WebContentsTopSitesObserver::NavigationEntryCommitted(
    const content::LoadCommittedDetails& load_details) {
  DCHECK(load_details.entry);

  // Frame-wise, we only care about navigating the main frame.
  // Type-wise, we only care about navigating to a new page, or renavigating to
  // an existing navigation entry.
  if (top_sites_ && load_details.is_main_frame &&
      (load_details.type == content::NavigationType::NAVIGATION_TYPE_NEW_PAGE ||
       load_details.type ==
           content::NavigationType::NAVIGATION_TYPE_EXISTING_PAGE)) {
    // Only report the Virtual URL. The virtual URL, when it differs from the
    // actual URL that is loaded in the renderer, is the one meant to be shown
    // to the user in all UI.
    top_sites_->OnNavigationCommitted(load_details.entry->GetVirtualURL());
  }
}

WEB_CONTENTS_USER_DATA_KEY_IMPL(WebContentsTopSitesObserver)

}  // namespace history
