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

Unified Diff: chrome/browser/favicon_helper.h

Issue 6735042: Move favicon from TabContents to TabContentsWrapper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 9 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
« no previous file with comments | « chrome/browser/extensions/extension_tabs_module.cc ('k') | chrome/browser/favicon_helper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/favicon_helper.h
diff --git a/chrome/browser/favicon_helper.h b/chrome/browser/favicon_helper.h
deleted file mode 100644
index 18722b058bfa8432de7014c07bd5597b44b806b1..0000000000000000000000000000000000000000
--- a/chrome/browser/favicon_helper.h
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_BROWSER_FAVICON_HELPER_H__
-#define CHROME_BROWSER_FAVICON_HELPER_H__
-#pragma once
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "chrome/browser/favicon_service.h"
-#include "chrome/common/ref_counted_util.h"
-#include "content/browser/cancelable_request.h"
-#include "content/browser/tab_contents/tab_contents_observer.h"
-#include "googleurl/src/gurl.h"
-
-class NavigationEntry;
-class Profile;
-class RefCountedMemory;
-class SkBitmap;
-class TabContents;
-
-// FaviconHelper is used to fetch the favicon for TabContents.
-//
-// FetchFavicon requests the favicon from the favicon service which in turn
-// requests the favicon from the history database. At this point
-// we only know the URL of the page, and not necessarily the url of the
-// favicon. To ensure we handle reloading stale favicons as well as
-// reloading a favicon on page reload we always request the favicon from
-// history regardless of whether the NavigationEntry has a favicon.
-//
-// After the navigation two types of events are delivered (which is
-// first depends upon who is faster): notification from the history
-// db on our request for the favicon (OnFaviconDataForInitialURL),
-// or a message from the renderer giving us the URL of the favicon for
-// the page (SetFaviconURL).
-// . If the history db has a valid up to date favicon for the page, we update
-// the NavigationEntry and use the favicon.
-// . When we receive the favicon url if it matches that of the NavigationEntry
-// and the NavigationEntry's favicon is set, we do nothing (everything is
-// ok).
-// . On the other hand if the database does not know the favicon for url, or
-// the favicon is out date, or the URL from the renderer does not match that
-// NavigationEntry we proceed to DownloadFaviconOrAskHistory. Before we
-// invoke DownloadFaviconOrAskHistory we wait until we've received both
-// the favicon url and the callback from history. We wait to ensure we
-// truly know both the favicon url and the state of the database.
-//
-// DownloadFaviconOrAskHistory does the following:
-// . If we have a valid favicon, but it is expired we ask the renderer to
-// download the favicon.
-// . Otherwise we ask the history database to update the mapping from
-// page url to favicon url and call us back with the favicon. Remember, it is
-// possible for the db to already have the favicon, just not the mapping
-// between page to favicon url. The callback for this is OnFaviconData.
-//
-// OnFaviconData either updates the favicon of the NavigationEntry (if the
-// db knew about the favicon), or requests the renderer to download the
-// favicon.
-//
-// When the renderer downloads the favicon SetFaviconImageData is invoked,
-// at which point we update the favicon of the NavigationEntry and notify
-// the database to save the favicon.
-
-class FaviconHelper : public TabContentsObserver {
- public:
- explicit FaviconHelper(TabContents* tab_contents);
- virtual ~FaviconHelper();
-
- // Initiates loading the favicon for the specified url.
- void FetchFavicon(const GURL& url);
-
- // Initiates loading an image from given |image_url|. Returns a download id
- // for caller to track the request. When download completes, |callback| is
- // called with the three params: the download_id, a boolean flag to indicate
- // whether the download succeeds and a SkBitmap as the downloaded image.
- // Note that |image_size| is a hint for images with multiple sizes. The
- // downloaded image is not resized to the given image_size. If 0 is passed,
- // the first frame of the image is returned.
- typedef Callback3<int, bool, const SkBitmap&>::Type ImageDownloadCallback;
- int DownloadImage(const GURL& image_url, int image_size,
- ImageDownloadCallback* callback);
-
- // Message Handler. Must be public, because also called from
- // PrerenderContents.
- void OnUpdateFaviconURL(int32 page_id, const GURL& icon_url);
-
- private:
- struct DownloadRequest {
- DownloadRequest() : callback(NULL) {}
- DownloadRequest(const GURL& url,
- const GURL& image_url,
- ImageDownloadCallback* callback)
- : url(url),
- image_url(image_url),
- callback(callback) {}
-
- GURL url;
- GURL image_url;
- ImageDownloadCallback* callback;
- };
-
- // TabContentsObserver implementation.
- virtual bool OnMessageReceived(const IPC::Message& message);
-
- void OnDidDownloadFavicon(int id,
- const GURL& image_url,
- bool errored,
- const SkBitmap& image);
-
- // Return the NavigationEntry for the active entry, or NULL if the active
- // entries URL does not match that of the URL last passed to FetchFavicon.
- NavigationEntry* GetEntry();
-
- Profile* profile();
-
- FaviconService* GetFaviconService();
-
- // See description above class for details.
- void OnFaviconDataForInitialURL(FaviconService::Handle handle,
- history::FaviconData favicon);
-
- // If the favicon has expired, asks the renderer to download the favicon.
- // Otherwise asks history to update the mapping between page url and icon
- // url with a callback to OnFaviconData when done.
- void DownloadFaviconOrAskHistory(NavigationEntry* entry);
-
- // See description above class for details.
- void OnFaviconData(FaviconService::Handle handle,
- history::FaviconData favicon);
-
- // Schedules a download for the specified entry. This adds the request to
- // download_requests_.
- int ScheduleDownload(const GURL& url, const GURL& image_url, int image_size,
- ImageDownloadCallback* callback);
-
- // Sets the image data for the favicon. This is invoked asynchronously after
- // we request the TabContents to download the favicon.
- void SetFavicon(const GURL& url, const GURL& icon_url, const SkBitmap& image);
-
- // Converts the image data to an SkBitmap and sets it on the NavigationEntry.
- // If the TabContents has a delegate, it is notified of the new favicon
- // (INVALIDATE_FAVICON).
- void UpdateFavicon(NavigationEntry* entry,
- scoped_refptr<RefCountedMemory> data);
- void UpdateFavicon(NavigationEntry* entry, const SkBitmap& image);
-
- // Scales the image such that either the width and/or height is 16 pixels
- // wide. Does nothing if the image is empty.
- SkBitmap ConvertToFaviconSize(const SkBitmap& image);
-
- // Returns true if the favicon should be saved.
- bool ShouldSaveFavicon(const GURL& url);
-
- // Used for history requests.
- CancelableRequestConsumer cancelable_consumer_;
-
- // URL of the page we're requesting the favicon for.
- GURL url_;
-
- // Whether we got the url for the page back from the renderer.
- // See "Favicon Details" in tab_contents.cc for more details.
- bool got_favicon_url_;
-
- // Whether we got the initial response for the favicon back from the renderer.
- // See "Favicon Details" in tab_contents.cc for more details.
- bool got_favicon_from_history_;
-
- // Whether the favicon is out of date. If true, it means history knows about
- // the favicon, but we need to download the favicon because the icon has
- // expired.
- // See "Favicon Details" in tab_contents.cc for more details.
- bool favicon_expired_;
-
- // Requests to the renderer to download favicons.
- typedef std::map<int, DownloadRequest> DownloadRequests;
- DownloadRequests download_requests_;
-
- DISALLOW_COPY_AND_ASSIGN(FaviconHelper);
-};
-
-#endif // CHROME_BROWSER_FAVICON_HELPER_H__
« no previous file with comments | « chrome/browser/extensions/extension_tabs_module.cc ('k') | chrome/browser/favicon_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698