| 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 3521944bf122cbaf93729e5d09bac85fdf90e980..45a21adce0d4c78e54292156b3b952c0c0fbc5a3 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"
|
| @@ -22,6 +22,7 @@
|
| #include "chrome/renderer/extensions/dispatcher.h"
|
| #include "chrome/renderer/extensions/extension_helper.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"
|
| @@ -200,13 +201,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),
|
| @@ -229,7 +232,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,
|
| @@ -304,28 +306,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();
|
| @@ -713,10 +693,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);
|
| }
|
|
|
| void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame,
|
| @@ -734,8 +712,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);
|
| }
|
|
|
| void ChromeRenderViewObserver::DidCommitProvisionalLoad(
|
| @@ -931,61 +909,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());
|
| }
|
|
|