Chromium Code Reviews| Index: chrome/browser/renderer_host/chrome_render_view_host_observer.cc |
| =================================================================== |
| --- chrome/browser/renderer_host/chrome_render_view_host_observer.cc (revision 214862) |
| +++ chrome/browser/renderer_host/chrome_render_view_host_observer.cc (working copy) |
| @@ -4,12 +4,20 @@ |
| #include "chrome/browser/renderer_host/chrome_render_view_host_observer.h" |
| +#include <vector> |
| + |
| #include "base/command_line.h" |
| +#include "base/strings/stringprintf.h" |
| +#include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/extensions/extension_system.h" |
| #include "chrome/browser/net/predictor.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/search_engines/search_terms_data.h" |
| +#include "chrome/browser/search_engines/template_url.h" |
| +#include "chrome/browser/search_engines/template_url_service.h" |
| +#include "chrome/browser/search_engines/template_url_service_factory.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/common/extensions/extension_messages.h" |
| @@ -18,18 +26,27 @@ |
| #include "chrome/common/url_constants.h" |
| #include "content/public/browser/child_process_security_policy.h" |
| #include "content/public/browser/notification_service.h" |
| +#include "content/public/browser/page_navigator.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/site_instance.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/common/page_transition_types.h" |
| #include "extensions/common/constants.h" |
| +#include "net/http/http_request_headers.h" |
| +#include "third_party/skia/include/core/SkBitmap.h" |
| +#include "ui/base/window_open_disposition.h" |
| +#include "ui/gfx/codec/jpeg_codec.h" |
| #if defined(OS_WIN) |
| #include "base/win/win_util.h" |
| #endif // OS_WIN |
| using content::ChildProcessSecurityPolicy; |
| +using content::OpenURLParams; |
| using content::RenderViewHost; |
| using content::SiteInstance; |
| +using content::WebContents; |
| using extensions::Extension; |
| using extensions::Manifest; |
| @@ -75,6 +92,8 @@ |
| IPC_BEGIN_MESSAGE_MAP(ChromeRenderViewHostObserver, message) |
| IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FocusedNodeTouched, |
| OnFocusedNodeTouched) |
| + IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RequestThumbnailForContextNode_ACK, |
| + OnGetImageThumbnail) |
|
Avi (use Gerrit)
2013/08/01 18:46:09
We name message handlers "OnXXX" where the message
Johnny(Jianning) Ding
2013/08/01 21:46:32
Done.
|
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -182,3 +201,50 @@ |
| #endif |
| } |
| } |
| + |
| +void ChromeRenderViewHostObserver::OnGetImageThumbnail(const SkBitmap& bitmap) { |
| + const int kDefaultQualityForImageSearch = 90; |
| + WebContents* web_contents = |
| + WebContents::FromRenderViewHost(render_view_host()); |
| + if (!web_contents) |
| + return; |
| + |
| + std::vector<unsigned char> data; |
| + if (!gfx::JPEGCodec::Encode( |
| + reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)), |
| + gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(), |
| + static_cast<int>(bitmap.rowBytes()), kDefaultQualityForImageSearch, |
| + &data)) |
| + return; |
| + |
| + const TemplateURL* const default_provider = |
| + TemplateURLServiceFactory::GetForProfile(profile_)-> |
| + GetDefaultSearchProvider(); |
|
Avi (use Gerrit)
2013/08/01 18:46:09
indent another 4.
Johnny(Jianning) Ding
2013/08/01 21:46:32
Done.
|
| + DCHECK(default_provider); |
| + TemplateURLRef::SearchTermsArgs search_args(ASCIIToUTF16("")); |
|
Avi (use Gerrit)
2013/08/01 18:46:09
TemplateURLRef::SearchTermsArgs search_args(base::
Johnny(Jianning) Ding
2013/08/01 21:46:32
Done.
|
| + search_args.image_thumbnail_content = std::string(data.begin(), |
| + data.end()); |
| + // TODO(jnd): Add a method in WebContentsViewDelegate to get the image URL |
| + // from the ContextMenuParams which creates current context menu. |
| + search_args.image_url = GURL(); |
| + TemplateURLRef::PostContent post_content; |
| + GURL result(default_provider->image_url_ref().ReplaceSearchTerms( |
| + search_args, &post_content)); |
| + if (!result.is_valid()) |
| + return; |
| + |
| + OpenURLParams open_url_params(result, content::Referrer(), NEW_FOREGROUND_TAB, |
| + content::PAGE_TRANSITION_LINK, false); |
| + const std::string& content_type = post_content.first; |
| + const std::string& post_data = post_content.second; |
| + if (!post_data.empty()) { |
| + DCHECK(!content_type.empty()); |
| + open_url_params.uses_post = true; |
| + open_url_params.post_data = post_data; |
| + open_url_params.extra_headers += base::StringPrintf( |
| + "%s: %s\r\n", net::HttpRequestHeaders::kContentType, |
| + content_type.c_str()); |
| + } |
| + |
| + web_contents->OpenURL(open_url_params); |
| +} |