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

Unified Diff: chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc

Issue 2737893002: Mojoify the RequestThumbnailForContextNode IPC message and reply (Closed)
Patch Set: change swap() call and rebase Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
index fe3361f9d8345324e2912850446377ec51ab4143..3fd63bd12a50ce3ecae00d3881ac820e7e4d6a40 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -15,6 +15,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
+#include "base/run_loop.h"
#include "base/strings/string16.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
@@ -31,6 +32,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/render_messages.h"
+#include "chrome/common/thumbnail_capturer.mojom.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/search_test_utils.h"
#include "chrome/test/base/ui_test_utils.h"
@@ -42,6 +44,7 @@
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
@@ -53,6 +56,7 @@
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_filter.h"
#include "net/url_request/url_request_interceptor.h"
+#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/WebKit/public/platform/WebInputEvent.h"
#include "third_party/WebKit/public/web/WebContextMenuData.h"
#include "ui/base/models/menu_model.h"
@@ -548,90 +552,6 @@ IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, OpenLinkInProfile) {
}
#endif // !defined(OS_CHROMEOS)
-class ThumbnailResponseWatcher : public content::NotificationObserver {
- public:
- enum QuitReason {
- STILL_RUNNING = 0,
- THUMBNAIL_RECEIVED,
- RENDER_PROCESS_GONE,
- };
-
- class MessageFilter : public content::BrowserMessageFilter {
- public:
- explicit MessageFilter(ThumbnailResponseWatcher* owner)
- : content::BrowserMessageFilter(ChromeMsgStart), owner_(owner) {}
-
- bool OnMessageReceived(const IPC::Message& message) override {
- if (message.type() ==
- ChromeViewHostMsg_RequestThumbnailForContextNode_ACK::ID) {
- content::BrowserThread::PostTask(
- content::BrowserThread::UI, FROM_HERE,
- base::Bind(&MessageFilter::OnRequestThumbnailForContextNodeACK,
- this));
- }
- return false;
- }
-
- void OnRequestThumbnailForContextNodeACK() {
- if (owner_)
- owner_->OnRequestThumbnailForContextNodeACK();
- }
-
- void Disown() { owner_ = nullptr; }
-
- private:
- ~MessageFilter() override {}
-
- ThumbnailResponseWatcher* owner_;
-
- DISALLOW_COPY_AND_ASSIGN(MessageFilter);
- };
-
- explicit ThumbnailResponseWatcher(
- content::RenderProcessHost* render_process_host)
- : message_loop_runner_(new content::MessageLoopRunner),
- filter_(new MessageFilter(this)),
- quit_reason_(STILL_RUNNING) {
- notification_registrar_.Add(
- this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
- content::Source<content::RenderProcessHost>(render_process_host));
- notification_registrar_.Add(
- this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
- content::Source<content::RenderProcessHost>(render_process_host));
- render_process_host->AddFilter(filter_.get());
- }
-
- ~ThumbnailResponseWatcher() override { filter_->Disown(); }
-
- QuitReason Wait() WARN_UNUSED_RESULT {
- message_loop_runner_->Run();
- DCHECK_NE(STILL_RUNNING, quit_reason_);
- return quit_reason_;
- }
-
- void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) override {
- DCHECK(type == content::NOTIFICATION_RENDERER_PROCESS_CLOSED ||
- type == content::NOTIFICATION_RENDERER_PROCESS_TERMINATED);
- quit_reason_ = RENDER_PROCESS_GONE;
- message_loop_runner_->Quit();
- }
-
- void OnRequestThumbnailForContextNodeACK() {
- quit_reason_ = THUMBNAIL_RECEIVED;
- message_loop_runner_->Quit();
- }
-
- private:
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
- scoped_refptr<MessageFilter> filter_;
- content::NotificationRegistrar notification_registrar_;
- QuitReason quit_reason_;
-
- DISALLOW_COPY_AND_ASSIGN(ThumbnailResponseWatcher);
-};
-
// Maintains image search test state. In particular, note that |menu_observer_|
// must live until the right-click completes asynchronously.
class SearchByImageBrowserTest : public InProcessBrowserTest {
@@ -650,10 +570,14 @@ class SearchByImageBrowserTest : public InProcessBrowserTest {
}
void AttemptImageSearch() {
- // Right-click where the image should be.
// |menu_observer_| will cause the search-by-image menu item to be clicked.
menu_observer_.reset(new ContextMenuNotificationObserver(
IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE));
+ RightClickImage();
+ }
+
+ // Right-click where the image should be.
+ void RightClickImage() {
content::WebContents* tab =
browser()->tab_strip_model()->GetActiveWebContents();
content::SimulateMouseClickAt(tab, 0, blink::WebMouseEvent::Button::Right,
@@ -716,14 +640,36 @@ IN_PROC_BROWSER_TEST_F(SearchByImageBrowserTest, ImageSearchWithCorruptImage) {
static const char kCorruptImage[] = "/image_search/corrupt.png";
SetupAndLoadImagePage(kCorruptImage);
- content::WebContents* tab =
- browser()->tab_strip_model()->GetActiveWebContents();
- ThumbnailResponseWatcher watcher(tab->GetRenderProcessHost());
- AttemptImageSearch();
+ // Open and close a context menu.
+ ContextMenuWaiter waiter(content::NotificationService::AllSources());
+ RightClickImage();
+ waiter.WaitForMenuOpenAndClose();
+
+ chrome::mojom::ThumbnailCapturerPtr thumbnail_capturer;
+ browser()
+ ->tab_strip_model()
+ ->GetActiveWebContents()
+ ->GetMainFrame()
+ ->GetRemoteInterfaces()
+ ->GetInterface(&thumbnail_capturer);
+
+ auto callback = [](bool* response_received, const base::Closure& quit,
+ const std::vector<uint8_t>& thumbnail_data,
+ const gfx::Size& original_size) {
+ *response_received = true;
+ quit.Run();
+ };
+
+ base::RunLoop run_loop;
+ bool response_received = false;
+ thumbnail_capturer->RequestThumbnailForContextNode(
+ 0, gfx::Size(2048, 2048),
+ base::Bind(callback, &response_received, run_loop.QuitClosure()));
+ run_loop.Run();
// The browser should receive a response from the renderer, because the
// renderer should not crash.
- EXPECT_EQ(ThumbnailResponseWatcher::THUMBNAIL_RECEIVED, watcher.Wait());
+ ASSERT_TRUE(response_received);
}
class LoadImageRequestInterceptor : public net::URLRequestInterceptor {
« no previous file with comments | « chrome/browser/chrome_content_renderer_manifest_overlay.json ('k') | chrome/browser/ui/android/context_menu_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698