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

Unified Diff: chrome/renderer/chrome_render_view_observer.cc

Issue 11232068: Extract renderer-side favicon downloading code into separate helper class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 8 years, 2 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/renderer/chrome_render_view_observer.cc
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index 65aa6186f62e98c5ba23929e5f01d68d26a5076b..9f55856c5689150294ae3eef6c5296fbde3c2b19 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -13,7 +13,7 @@
#include "base/string_util.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
-#include "chrome/common/icon_messages.h"
+#include "chrome/common/favicon_url.h"
#include "chrome/common/prerender_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
@@ -21,6 +21,7 @@
#include "chrome/renderer/content_settings_observer.h"
#include "chrome/renderer/extensions/dispatcher.h"
#include "chrome/renderer/external_host_bindings.h"
+#include "chrome/renderer/favicon_helper.h"
#include "chrome/renderer/frame_sniffer.h"
#include "chrome/renderer/prerender/prerender_helper.h"
#include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h"
@@ -199,13 +200,15 @@ ChromeRenderViewObserver::ChromeRenderViewObserver(
ContentSettingsObserver* content_settings,
ChromeRenderProcessObserver* chrome_render_process_observer,
extensions::Dispatcher* extension_dispatcher,
- TranslateHelper* translate_helper)
+ TranslateHelper* translate_helper,
+ FaviconHelper* favicon_helper)
: content::RenderViewObserver(render_view),
chrome_render_process_observer_(chrome_render_process_observer),
extension_dispatcher_(extension_dispatcher),
content_settings_(content_settings),
translate_helper_(translate_helper),
phishing_classifier_(NULL),
+ favicon_helper_(favicon_helper),
last_indexed_page_id_(-1),
allow_displaying_insecure_content_(false),
allow_running_insecure_content_(false),
@@ -228,7 +231,6 @@ bool ChromeRenderViewObserver::OnMessageReceived(const IPC::Message& message) {
OnHandleMessageFromExternalHost)
IPC_MESSAGE_HANDLER(ChromeViewMsg_JavaScriptStressTestControl,
OnJavaScriptStressTestControl)
- IPC_MESSAGE_HANDLER(IconMsg_DownloadFavicon, OnDownloadFavicon)
IPC_MESSAGE_HANDLER(ChromeViewMsg_SetAllowDisplayingInsecureContent,
OnSetAllowDisplayingInsecureContent)
IPC_MESSAGE_HANDLER(ChromeViewMsg_SetAllowRunningInsecureContent,
@@ -303,28 +305,6 @@ void ChromeRenderViewObserver::OnJavaScriptStressTestControl(int cmd,
}
}
-void ChromeRenderViewObserver::OnDownloadFavicon(int id,
- const GURL& image_url,
- int image_size) {
- bool data_image_failed = false;
- if (image_url.SchemeIs("data")) {
- SkBitmap data_image = ImageFromDataUrl(image_url);
- data_image_failed = data_image.empty();
- if (!data_image_failed) {
- std::vector<SkBitmap> images(1, data_image);
- Send(new IconHostMsg_DidDownloadFavicon(
- routing_id(), id, image_url, false, image_size, images));
- }
- }
-
- if (data_image_failed ||
- !DownloadFavicon(id, image_url, image_size)) {
- Send(new IconHostMsg_DidDownloadFavicon(
- routing_id(), id, image_url, true, image_size,
- std::vector<SkBitmap>()));
- }
-}
-
void ChromeRenderViewObserver::OnSetAllowDisplayingInsecureContent(bool allow) {
allow_displaying_insecure_content_ = allow;
WebFrame* main_frame = render_view()->GetWebView()->mainFrame();
@@ -695,10 +675,8 @@ void ChromeRenderViewObserver::DidStopLoading() {
if (!url.isEmpty())
urls.push_back(FaviconURL(url, ToFaviconType(icon_urls[i].iconType())));
}
- if (!urls.empty()) {
- Send(new IconHostMsg_UpdateFaviconURL(
- routing_id(), render_view()->GetPageId(), urls));
- }
+ favicon_helper_->SendUpdateFaviconURL(
+ routing_id(), render_view()->GetPageId(), urls);
joth 2012/10/30 14:41:45 rather than have this observer call into favicon o
Cait (Slow) 2012/10/30 20:07:33 Done.
}
void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame,
@@ -716,8 +694,8 @@ void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame,
urls.push_back(FaviconURL(icon_urls[i].iconURL(),
ToFaviconType(icon_urls[i].iconType())));
}
- Send(new IconHostMsg_UpdateFaviconURL(
- routing_id(), render_view()->GetPageId(), urls));
+ favicon_helper_->SendUpdateFaviconURL(
+ routing_id(), render_view()->GetPageId(), urls);
joth 2012/10/30 14:41:45 likewise, this entire method (line 684 - 698) coul
Cait (Slow) 2012/10/30 20:07:33 Done.
}
void ChromeRenderViewObserver::DidCommitProvisionalLoad(
@@ -913,61 +891,6 @@ ExternalHostBindings* ChromeRenderViewObserver::GetExternalHostBindings() {
return external_host_bindings_.get();
}
-bool ChromeRenderViewObserver::DownloadFavicon(int id,
- const GURL& image_url,
- int image_size) {
- // Make sure webview was not shut down.
- if (!render_view()->GetWebView())
- return false;
- // Create an image resource fetcher and assign it with a call back object.
- image_fetchers_.push_back(linked_ptr<MultiResolutionImageResourceFetcher>(
- new MultiResolutionImageResourceFetcher(
- image_url, render_view()->GetWebView()->mainFrame(), id,
- WebURLRequest::TargetIsFavicon,
- base::Bind(&ChromeRenderViewObserver::DidDownloadFavicon,
- base::Unretained(this), image_size))));
- return true;
-}
-
-void ChromeRenderViewObserver::DidDownloadFavicon(
- int requested_size,
- MultiResolutionImageResourceFetcher* fetcher,
- const std::vector<SkBitmap>& images) {
- // Notify requester of image download status.
- Send(new IconHostMsg_DidDownloadFavicon(routing_id(),
- fetcher->id(),
- fetcher->image_url(),
- images.empty(),
- requested_size,
- images));
-
- // Remove the image fetcher from our pending list. We're in the callback from
- // MultiResolutionImageResourceFetcher, best to delay deletion.
- ImageResourceFetcherList::iterator iter;
- for (iter = image_fetchers_.begin(); iter != image_fetchers_.end(); ++iter) {
- if (iter->get() == fetcher) {
- iter->release();
- image_fetchers_.erase(iter);
- break;
- }
- }
- MessageLoop::current()->DeleteSoon(FROM_HERE, fetcher);
-}
-
-SkBitmap ChromeRenderViewObserver::ImageFromDataUrl(const GURL& url) const {
- std::string mime_type, char_set, data;
- if (net::DataURL::Parse(url, &mime_type, &char_set, &data) && !data.empty()) {
- // Decode the favicon using WebKit's image decoder.
- webkit_glue::ImageDecoder decoder(
- gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize));
- const unsigned char* src_data =
- reinterpret_cast<const unsigned char*>(&data[0]);
-
- return decoder.Decode(src_data, data.size());
- }
- return SkBitmap();
-}
-
bool ChromeRenderViewObserver::IsStrictSecurityHost(const std::string& host) {
return (strict_security_hosts_.find(host) != strict_security_hosts_.end());
}

Powered by Google App Engine
This is Rietveld 408576698