Chromium Code Reviews| Index: chrome/renderer/chrome_content_renderer_client.cc |
| diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc |
| index 092b48f31556f817437b63433476946a3354578c..eb96d8758e251d14145f3349888aecd2cfcbd44d 100644 |
| --- a/chrome/renderer/chrome_content_renderer_client.cc |
| +++ b/chrome/renderer/chrome_content_renderer_client.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/path_service.h" |
| #include "base/string_util.h" |
| +#include "base/strings/string_number_conversions.h" |
| #include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "chrome/common/child_process_logging.h" |
| @@ -24,6 +25,7 @@ |
| #include "chrome/common/extensions/extension_set.h" |
| #include "chrome/common/extensions/permissions/chrome_api_permissions.h" |
| #include "chrome/common/external_ipc_fuzzer.h" |
| +#include "chrome/common/instant_types.h" |
| #include "chrome/common/localized_error.h" |
| #include "chrome/common/render_messages.h" |
| #include "chrome/common/url_constants.h" |
| @@ -201,6 +203,42 @@ bool ShouldUseJavaScriptSettingForPlugin(const WebPluginInfo& plugin) { |
| return false; |
| } |
| +// Parses |url| and fills in |id| with the InstantRestrictedID obtained from the |
| +// |url|. |render_view_id| is the ID of the associated RenderView. |
| +// |
| +// Valid |url| forms: |
| +// chrome-search://favicon/<view_id>/<restriced_id> or |
| +// chrome-search://thumb/<view_id>/<restricted_id> |
| +// |
| +// If the |url| is valid, returns true and fills in |id| with restricted_id |
| +// value. If the |url| is invalid, returns false and |id| is not set. |
| +bool GetInstantRestrictedIDFromURL(int render_view_id, |
|
Jered
2013/06/04 23:27:23
I realized this function might make more sense in
kmadhusu
2013/06/05 00:48:30
Moved to SearchBox.
|
| + const GURL& url, |
| + InstantRestrictedID* id) { |
| + // Strip leading slash. |
| + std::string path = url.path().substr(1); |
| + |
| + // Check that the path is of Most visited item ID form. |
| + std::vector<std::string> tokens; |
| + if (Tokenize(path, "/", &tokens) != 2) |
| + return false; |
| + |
| + int view_id = 0; |
| + if (!base::StringToInt(tokens[0], &view_id) || view_id != render_view_id) |
| + return false; |
| + return base::StringToInt(tokens[1], id); |
| +} |
| + |
| +content::RenderView* GetRenderViewFromWebFrame(WebKit::WebFrame* frame) { |
| + if (!frame) |
| + return NULL; |
| + |
| + WebKit::WebView* view = frame->view(); |
| + if (!view) |
| + return NULL; |
| + return content::RenderView::FromWebView(view); |
| +} |
| + |
| } // namespace |
| namespace chrome { |
| @@ -992,6 +1030,23 @@ bool ChromeContentRendererClient::WillSendRequest( |
| return true; |
| } |
| + const content::RenderView* render_view = GetRenderViewFromWebFrame(frame); |
| + if (SearchBox* search_box = SearchBox::Get(render_view)) { |
| + if (url.SchemeIs(chrome::kChromeSearchScheme)) { |
| + if (url.host() == chrome::kChromeUIThumbnailHost) { |
| + InstantRestrictedID rid = 0; |
| + return GetInstantRestrictedIDFromURL(render_view->GetRoutingID(), url, |
|
Jered
2013/06/04 23:19:20
If the rewrite fails, we'll send a bad URL to chro
kmadhusu
2013/06/05 00:48:30
If rewrite fails, we will send a bad URL to Favico
|
| + &rid) && |
| + search_box->GenerateThumbnailURLFromRID(rid, new_url); |
| + } else if (url.host() == chrome::kChromeUIFaviconHost) { |
| + InstantRestrictedID rid = 0; |
| + return GetInstantRestrictedIDFromURL(render_view->GetRoutingID(), url, |
| + &rid) && |
| + search_box->GenerateFaviconURLFromRID(rid, new_url); |
| + } |
| + } |
| + } |
| + |
| return false; |
| } |