| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/favicon_source.h" | 5 #include "chrome/browser/ui/webui/favicon_source.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "chrome/browser/favicon/favicon_service_factory.h" | 9 #include "chrome/browser/favicon/favicon_service_factory.h" |
| 10 #include "chrome/browser/history/top_sites.h" | 10 #include "chrome/browser/history/top_sites.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
| 12 #include "chrome/browser/ui/webui/web_ui_util.h" | 13 #include "chrome/browser/ui/webui/web_ui_util.h" |
| 13 #include "chrome/common/url_constants.h" | 14 #include "chrome/common/url_constants.h" |
| 14 #include "grit/locale_settings.h" | 15 #include "grit/locale_settings.h" |
| 15 #include "grit/ui_resources.h" | 16 #include "grit/ui_resources.h" |
| 16 #include "ui/base/l10n/l10n_util.h" | 17 #include "ui/base/l10n/l10n_util.h" |
| 17 #include "ui/base/layout.h" | 18 #include "ui/base/layout.h" |
| 18 #include "ui/base/resource/resource_bundle.h" | 19 #include "ui/base/resource/resource_bundle.h" |
| 19 | 20 |
| 20 FaviconSource::FaviconSource(Profile* profile, IconType type) | 21 FaviconSource::FaviconSource(Profile* profile, IconType type) |
| 21 : DataSource(type == FAVICON ? chrome::kChromeUIFaviconHost : | 22 : profile_(profile->GetOriginalProfile()), |
| 22 chrome::kChromeUITouchIconHost, | 23 icon_types_(type == FAVICON ? history::FAVICON : |
| 23 MessageLoop::current()) { | 24 history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON | |
| 24 Init(profile, type); | 25 history::FAVICON) { |
| 25 } | |
| 26 | |
| 27 FaviconSource::FaviconSource(Profile* profile, | |
| 28 IconType type, | |
| 29 const std::string& source_name) | |
| 30 : DataSource(source_name, MessageLoop::current()) { | |
| 31 Init(profile, type); | |
| 32 } | 26 } |
| 33 | 27 |
| 34 FaviconSource::~FaviconSource() { | 28 FaviconSource::~FaviconSource() { |
| 35 } | 29 } |
| 36 | 30 |
| 37 void FaviconSource::Init(Profile* profile, IconType type) { | 31 std::string FaviconSource::GetSource() { |
| 38 profile_ = profile->GetOriginalProfile(); | 32 return icon_types_ == history::FAVICON ? |
| 39 icon_types_ = type == FAVICON ? history::FAVICON : | 33 chrome::kChromeUIFaviconHost : chrome::kChromeUITouchIconHost; |
| 40 history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON | | |
| 41 history::FAVICON; | |
| 42 } | 34 } |
| 43 | 35 |
| 44 void FaviconSource::StartDataRequest(const std::string& path, | 36 void FaviconSource::StartDataRequest(const std::string& path, |
| 45 bool is_incognito, | 37 bool is_incognito, |
| 46 int request_id) { | 38 int request_id) { |
| 47 FaviconService* favicon_service = | 39 FaviconService* favicon_service = |
| 48 FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); | 40 FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 49 if (!favicon_service || path.empty()) { | 41 if (!favicon_service || path.empty()) { |
| 50 SendDefaultResponse(IconRequest(request_id, | 42 SendDefaultResponse(IconRequest(request_id, |
| 51 "", | 43 "", |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 url = GURL(originalUrl).GetOrigin(); | 108 url = GURL(originalUrl).GetOrigin(); |
| 117 } else { | 109 } else { |
| 118 url = GURL(path); | 110 url = GURL(path); |
| 119 } | 111 } |
| 120 } | 112 } |
| 121 | 113 |
| 122 // Intercept requests for prepopulated pages. | 114 // Intercept requests for prepopulated pages. |
| 123 for (size_t i = 0; i < arraysize(history::kPrepopulatedPages); i++) { | 115 for (size_t i = 0; i < arraysize(history::kPrepopulatedPages); i++) { |
| 124 if (url.spec() == | 116 if (url.spec() == |
| 125 l10n_util::GetStringUTF8(history::kPrepopulatedPages[i].url_id)) { | 117 l10n_util::GetStringUTF8(history::kPrepopulatedPages[i].url_id)) { |
| 126 SendResponse(request_id, | 118 url_data_source()->SendResponse(request_id, |
| 127 ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( | 119 ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( |
| 128 history::kPrepopulatedPages[i].favicon_id, | 120 history::kPrepopulatedPages[i].favicon_id, |
| 129 scale_factor)); | 121 scale_factor)); |
| 130 return; | 122 return; |
| 131 } | 123 } |
| 132 } | 124 } |
| 133 | 125 |
| 134 favicon_service->GetRawFaviconForURL( | 126 favicon_service->GetRawFaviconForURL( |
| 135 FaviconService::FaviconForURLParams( | 127 FaviconService::FaviconForURLParams( |
| 136 profile_, url, icon_types_, size_in_dip), | 128 profile_, url, icon_types_, size_in_dip), |
| (...skipping 24 matching lines...) Expand all Loading... |
| 161 // No additional checks to locate the favicon resource in the base | 153 // No additional checks to locate the favicon resource in the base |
| 162 // implementation. | 154 // implementation. |
| 163 return false; | 155 return false; |
| 164 } | 156 } |
| 165 | 157 |
| 166 void FaviconSource::OnFaviconDataAvailable( | 158 void FaviconSource::OnFaviconDataAvailable( |
| 167 const IconRequest& request, | 159 const IconRequest& request, |
| 168 const history::FaviconBitmapResult& bitmap_result) { | 160 const history::FaviconBitmapResult& bitmap_result) { |
| 169 if (bitmap_result.is_valid()) { | 161 if (bitmap_result.is_valid()) { |
| 170 // Forward the data along to the networking system. | 162 // Forward the data along to the networking system. |
| 171 SendResponse(request.request_id, bitmap_result.bitmap_data); | 163 url_data_source()->SendResponse( |
| 164 request.request_id, bitmap_result.bitmap_data); |
| 172 } else if (!HandleMissingResource(request)) { | 165 } else if (!HandleMissingResource(request)) { |
| 173 SendDefaultResponse(request); | 166 SendDefaultResponse(request); |
| 174 } | 167 } |
| 175 } | 168 } |
| 176 | 169 |
| 177 void FaviconSource::SendDefaultResponse(const IconRequest& icon_request) { | 170 void FaviconSource::SendDefaultResponse(const IconRequest& icon_request) { |
| 178 int favicon_index; | 171 int favicon_index; |
| 179 int resource_id; | 172 int resource_id; |
| 180 switch (icon_request.size_in_dip) { | 173 switch (icon_request.size_in_dip) { |
| 181 case 64: | 174 case 64: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 193 } | 186 } |
| 194 base::RefCountedMemory* default_favicon = default_favicons_[favicon_index]; | 187 base::RefCountedMemory* default_favicon = default_favicons_[favicon_index]; |
| 195 | 188 |
| 196 if (!default_favicon) { | 189 if (!default_favicon) { |
| 197 ui::ScaleFactor scale_factor = icon_request.scale_factor; | 190 ui::ScaleFactor scale_factor = icon_request.scale_factor; |
| 198 default_favicon = ResourceBundle::GetSharedInstance() | 191 default_favicon = ResourceBundle::GetSharedInstance() |
| 199 .LoadDataResourceBytesForScale(resource_id, scale_factor); | 192 .LoadDataResourceBytesForScale(resource_id, scale_factor); |
| 200 default_favicons_[favicon_index] = default_favicon; | 193 default_favicons_[favicon_index] = default_favicon; |
| 201 } | 194 } |
| 202 | 195 |
| 203 SendResponse(icon_request.request_id, default_favicon); | 196 url_data_source()->SendResponse(icon_request.request_id, default_favicon); |
| 204 } | 197 } |
| OLD | NEW |