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

Side by Side Diff: chrome/browser/renderer_host/chrome_render_view_host_observer.cc

Issue 22314006: A few fixes for image search: (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/renderer_host/chrome_render_view_host_observer.h" 5 #include "chrome/browser/renderer_host/chrome_render_view_host_observer.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 #if defined(OS_WIN) && defined(USE_AURA) 199 #if defined(OS_WIN) && defined(USE_AURA)
200 base::win::DismissVirtualKeyboard(); 200 base::win::DismissVirtualKeyboard();
201 #endif 201 #endif
202 } 202 }
203 } 203 }
204 204
205 // Handles the image thumbnail for the context node, composes a image search 205 // Handles the image thumbnail for the context node, composes a image search
206 // request based on the received thumbnail and opens the request in a new tab. 206 // request based on the received thumbnail and opens the request in a new tab.
207 void ChromeRenderViewHostObserver::OnRequestThumbnailForContextNodeACK( 207 void ChromeRenderViewHostObserver::OnRequestThumbnailForContextNodeACK(
208 const SkBitmap& bitmap) { 208 const SkBitmap& bitmap) {
209 const int kDefaultQualityForImageSearch = 90;
210 WebContents* web_contents = 209 WebContents* web_contents =
211 WebContents::FromRenderViewHost(render_view_host()); 210 WebContents::FromRenderViewHost(render_view_host());
212 if (!web_contents) 211 const TemplateURL* const default_provider =
212 TemplateURLServiceFactory::GetForProfile(profile_)->
213 GetDefaultSearchProvider();
214 if (!web_contents || !default_provider)
213 return; 215 return;
214 216
217 const int kDefaultQualityForImageSearch = 90;
215 std::vector<unsigned char> data; 218 std::vector<unsigned char> data;
216 if (!gfx::JPEGCodec::Encode( 219 if (!gfx::JPEGCodec::Encode(
217 reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)), 220 reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)),
218 gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(), 221 gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(),
219 static_cast<int>(bitmap.rowBytes()), kDefaultQualityForImageSearch, 222 static_cast<int>(bitmap.rowBytes()), kDefaultQualityForImageSearch,
220 &data)) 223 &data))
221 return; 224 return;
222 225
223 const TemplateURL* const default_provider =
224 TemplateURLServiceFactory::GetForProfile(profile_)->
225 GetDefaultSearchProvider();
226 DCHECK(default_provider);
227 TemplateURLRef::SearchTermsArgs search_args = 226 TemplateURLRef::SearchTermsArgs search_args =
228 TemplateURLRef::SearchTermsArgs(base::string16()); 227 TemplateURLRef::SearchTermsArgs(base::string16());
229 search_args.image_thumbnail_content = std::string(data.begin(), 228 search_args.image_thumbnail_content = std::string(data.begin(), data.end());
230 data.end());
231 // TODO(jnd): Add a method in WebContentsViewDelegate to get the image URL 229 // TODO(jnd): Add a method in WebContentsViewDelegate to get the image URL
232 // from the ContextMenuParams which creates current context menu. 230 // from the ContextMenuParams which creates current context menu.
233 search_args.image_url = GURL(); 231 search_args.image_url = GURL();
234 TemplateURLRef::PostContent post_content; 232 TemplateURLRef::PostContent post_content;
235 GURL result(default_provider->image_url_ref().ReplaceSearchTerms( 233 GURL result(default_provider->image_url_ref().ReplaceSearchTerms(
236 search_args, &post_content)); 234 search_args, &post_content));
237 if (!result.is_valid()) 235 if (!result.is_valid())
238 return; 236 return;
239 237
240 OpenURLParams open_url_params(result, content::Referrer(), NEW_FOREGROUND_TAB, 238 OpenURLParams open_url_params(result, content::Referrer(), NEW_FOREGROUND_TAB,
241 content::PAGE_TRANSITION_LINK, false); 239 content::PAGE_TRANSITION_LINK, false);
242 const std::string& content_type = post_content.first; 240 const std::string& content_type = post_content.first;
243 std::string& post_data = post_content.second; 241 std::string* post_data = &post_content.second;
244 if (!post_data.empty()) { 242 if (!post_data->empty()) {
245 DCHECK(!content_type.empty()); 243 DCHECK(!content_type.empty());
246 open_url_params.uses_post = true; 244 open_url_params.uses_post = true;
247 open_url_params.browser_initiated_post_data = 245 open_url_params.browser_initiated_post_data =
248 base::RefCountedString::TakeString(&post_data); 246 base::RefCountedString::TakeString(post_data);
249 open_url_params.extra_headers += base::StringPrintf( 247 open_url_params.extra_headers += base::StringPrintf(
250 "%s: %s\r\n", net::HttpRequestHeaders::kContentType, 248 "%s: %s\r\n", net::HttpRequestHeaders::kContentType,
251 content_type.c_str()); 249 content_type.c_str());
252 } 250 }
253
254 web_contents->OpenURL(open_url_params); 251 web_contents->OpenURL(open_url_params);
255 } 252 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698