Index: chrome/test/data/extensions/platform_apps/web_view/context_menus/basic/embedder.js |
diff --git a/chrome/test/data/extensions/platform_apps/web_view/context_menus/basic/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/context_menus/basic/embedder.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a110e3862562eaa15c9d99a34e43f4a76099e5b3 |
--- /dev/null |
+++ b/chrome/test/data/extensions/platform_apps/web_view/context_menus/basic/embedder.js |
@@ -0,0 +1,232 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+var LOG = function(msg) { window.console.log(msg); }; |
+ |
+function ContextMenuTester() { |
+ this.webview_ = null; |
+ this.id_ = ''; |
+ |
+ this.inlineClickCalled_ = false; |
+ this.globalClickCalled_ = false; |
+ |
+ // Used for createThreeMenuItems(). |
+ this.numItemsCreated_ = 0; |
+ |
+ this.failed_ = false; |
+} |
+ |
+ContextMenuTester.prototype.setWebview = function(webview) { |
+ this.webview_ = webview; |
+}; |
+ |
+ContextMenuTester.prototype.testProperties = function() { |
+ LOG('testProperties'); |
+ if (!this.webview_) { |
+ this.fail_(); |
+ return; |
+ } |
+ |
+ var w = this.webview_; |
+ this.assertTrue_(!!w.contextMenus); |
+ this.assertEq_('function', typeof w.contextMenus.create); |
+ this.assertEq_('function', typeof w.contextMenus.update); |
+ this.assertEq_('function', typeof w.contextMenus.remove); |
+ this.assertEq_('function', typeof w.contextMenus.removeAll); |
+ |
+ var onClicked = w.contextMenus.onClicked; |
+ this.assertTrue_(!!onClicked); |
+ this.assertEq_('function', typeof onClicked.addListener); |
+ this.assertEq_('function', typeof onClicked.hasListener); |
+ this.assertEq_('function', typeof onClicked.hasListeners); |
+ this.assertEq_('function', typeof onClicked.removeListener); |
+ |
+ if (!this.failed_) { |
+ this.proceedTest_('ITEM_CHECKED'); |
+ } |
+}; |
+ |
+ContextMenuTester.prototype.testCreateMenuItem = function() { |
+ LOG('testCreateMenuItem'); |
+ if (!this.webview_) { |
+ this.fail_(); |
+ return; |
+ } |
+ |
+ var self = this; |
+ this.id_ = this.webview_.contextMenus.create({ |
+ 'title': 'initial-title', |
+ 'onclick': function() { self.onClick_('inline'); } |
+ }, function createdCallback() { |
+ LOG('ITEM_CREATED'); |
+ self.proceedTest_('ITEM_CREATED'); |
+ }); |
+ this.webview_.contextMenus.onClicked.addListener(function() { |
+ self.onClick_('global'); |
+ }); |
+}; |
+ |
+ContextMenuTester.prototype.testUpdateMenuItem = function() { |
+ LOG('testUpdateMenuItem'); |
+ if (!this.id_) { |
+ this.fail_(); |
+ return; |
+ } |
+ |
+ var self = this; |
+ this.webview_.contextMenus.update(this.id_, |
+ {'title': 'new_title'}, |
+ function() { self.proceedTest_('ITEM_UPDATED'); }); |
+}; |
+ |
+ContextMenuTester.prototype.testRemoveItem = function() { |
+ LOG('testRemoveItem'); |
+ var self = this; |
+ this.webview_.contextMenus.remove( |
+ this.id_, |
+ function() { self.proceedTest_('ITEM_REMOVED'); }); |
+}; |
+ |
+ContextMenuTester.prototype.createThreeMenuItems = function() { |
+ LOG('createThreeMenuItems'); |
+ var self = this; |
+ var createdCallback = function() { self.onCreate_(); }; |
+ this.webview_.contextMenus.create({'title': 'a'}, createdCallback); |
+ this.webview_.contextMenus.create({'title': 'b'}, createdCallback); |
+ this.webview_.contextMenus.create({'title': 'c'}, createdCallback); |
+}; |
+ |
+ContextMenuTester.prototype.testRemoveAllItems = function() { |
+ LOG('testRemoveAllItems'); |
+ var self = this; |
+ this.webview_.contextMenus.removeAll(function() { |
+ self.proceedTest_('ITEM_ALL_REMOVED'); |
+ }); |
+}; |
+ |
+ContextMenuTester.prototype.onClick_ = function(type) { |
+ if (type == 'global') { |
+ this.globalClickCalled_ = true; |
+ } else if (type == 'inline') { |
+ this.inlineClickCalled_ = true; |
+ } |
+ if (this.inlineClickCalled_ && this.globalClickCalled_) { |
+ this.proceedTest_('ITEM_CLICKED'); |
+ } |
+}; |
+ |
+ContextMenuTester.prototype.onCreate_ = function() { |
+ ++this.numItemsCreated_; |
+ if (this.numItemsCreated_ == 3) { |
+ this.proceedTest_('ITEM_MULTIPLE_CREATED'); |
+ } |
+}; |
+ |
+ContextMenuTester.prototype.proceedTest_ = function(step) { |
+ switch (step) { |
+ case 'ITEM_CHECKED': |
+ document.title = 'ITEM_CHECKED'; |
+ break; |
+ case 'ITEM_CREATED': |
+ document.title = 'ITEM_CREATED'; |
+ break; |
+ case 'ITEM_CLICKED': |
+ chrome.test.sendMessage('ITEM_CLICKED'); |
+ break; |
+ case 'ITEM_UPDATED': |
+ document.title = 'ITEM_UPDATED'; |
+ break; |
+ case 'ITEM_REMOVED': |
+ document.title = 'ITEM_REMOVED'; |
+ break; |
+ case 'ITEM_MULTIPLE_CREATED': |
+ document.title = 'ITEM_MULTIPLE_CREATED'; |
+ break; |
+ case 'ITEM_ALL_REMOVED': |
+ document.title = 'ITEM_ALL_REMOVED'; |
+ break; |
+ default: |
+ break; |
+ } |
+}; |
+ |
+ContextMenuTester.prototype.fail_ = function() { |
+ this.failed_ = true; |
+ document.title = 'error'; |
+}; |
+ |
+ContextMenuTester.prototype.assertEq_ = function(e, a) { |
+ if (e != a) { |
+ this.fail_(); |
+ } |
+}; |
+ |
+ContextMenuTester.prototype.assertTrue_ = function(c) { |
+ if (!c) { |
+ this.fail_(); |
+ } |
+}; |
+ |
+var tester = new ContextMenuTester(); |
+ |
+// window.* exported functions begin. |
+window.checkProperties = function() { |
+ tester.testProperties(); |
+}; |
+window.createMenuItem = function() { |
+ tester.testCreateMenuItem(); |
+}; |
+window.updateMenuItem = function() { |
+ tester.testUpdateMenuItem(); |
+}; |
+window.removeItem = function() { |
+ tester.testRemoveItem(); |
+}; |
+window.createThreeMenuItems = function() { |
+ tester.createThreeMenuItems(); |
+}; |
+window.removeAllItems = function() { |
+ LOG('window.testRemoveAllItems'); |
+ tester.testRemoveAllItems(); |
+}; |
+// window.* exported functions end. |
+ |
+function setUpTest(messageCallback) { |
+ var guestUrl = 'data:text/html,<html><body>guest</body></html>'; |
+ var webview = document.createElement('webview'); |
+ |
+ var onLoadStop = function(e) { |
+ LOG('webview has loaded.'); |
+ webview.executeScript( |
+ {file: 'guest.js'}, |
+ function(results) { |
+ LOG('Script has been injected into webview.'); |
+ // Establish a communication channel with the guest. |
+ var msg = ['connect']; |
+ webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+ }); |
+ }; |
+ webview.addEventListener('loadstop', onLoadStop); |
+ |
+ window.addEventListener('message', function(e) { |
+ var data = JSON.parse(e.data); |
+ if (data[0] == 'connected') { |
+ console.log('A communication channel has been established with webview.'); |
+ } |
+ messageCallback(webview); |
+ }); |
+ |
+ webview.setAttribute('src', guestUrl); |
+ document.body.appendChild(webview); |
+} |
+ |
+onload = function() { |
+ chrome.test.getConfig(function(config) { |
+ setUpTest(function(webview) { |
+ LOG('Guest load completed.'); |
+ chrome.test.sendMessage('Launched'); |
+ tester.setWebview(webview); |
+ }); |
+ }); |
+}; |