Index: chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc |
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc |
index ef42c55e5c1d9c054a3420b72d1123bc6451f35d..2a27e3c422d2425216d5953b1327a793fe5176d4 100644 |
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc |
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc |
@@ -6,9 +6,11 @@ |
#include "base/bind.h" |
#include "base/message_loop/message_loop.h" |
+#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" |
#include "content/public/browser/notification_service.h" |
+#include "content/public/test/test_utils.h" |
ContextMenuNotificationObserver::ContextMenuNotificationObserver( |
int command_to_execute) |
@@ -32,7 +34,8 @@ void ContextMenuNotificationObserver::Observe( |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&ContextMenuNotificationObserver::ExecuteCommand, |
- base::Unretained(this), context_menu)); |
+ base::Unretained(this), |
+ context_menu)); |
break; |
} |
@@ -46,3 +49,53 @@ void ContextMenuNotificationObserver::ExecuteCommand( |
context_menu->ExecuteCommand(command_to_execute_, 0); |
context_menu->Cancel(); |
} |
+ |
+SaveLinkAsContextMenuObserver::SaveLinkAsContextMenuObserver( |
+ const content::NotificationSource& source) |
+ : ContextMenuNotificationObserver(IDC_CONTENT_CONTEXT_SAVELINKAS), |
+ menu_visible_(false) { |
+} |
+ |
+SaveLinkAsContextMenuObserver::~SaveLinkAsContextMenuObserver() { |
+} |
+ |
+void SaveLinkAsContextMenuObserver::Observe( |
+ int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ switch (type) { |
+ case chrome::NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN: { |
+ menu_visible_ = true; |
+ RenderViewContextMenu* context_menu = |
+ content::Source<RenderViewContextMenu>(source).ptr(); |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&SaveLinkAsContextMenuObserver::Cancel, |
+ base::Unretained(this), |
+ context_menu)); |
+ break; |
+ } |
+ |
+ default: |
+ NOTREACHED(); |
+ } |
+} |
+ |
+void SaveLinkAsContextMenuObserver::WaitForMenu() { |
+ content::WindowedNotificationObserver menu_observer( |
+ chrome::NOTIFICATION_RENDER_VIEW_CONTEXT_MENU_SHOWN, |
+ content::NotificationService::AllSources()); |
+ if (!menu_visible_) |
+ menu_observer.Wait(); |
+ menu_visible_ = false; |
+} |
+ |
+base::string16 SaveLinkAsContextMenuObserver::GetSuggestedFilename() { |
+ return params_.suggested_filename; |
+} |
+ |
+void SaveLinkAsContextMenuObserver::Cancel( |
+ RenderViewContextMenu* context_menu) { |
+ params_ = context_menu->params(); |
+ context_menu->Cancel(); |
+} |