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

Unified Diff: chrome/test/data/chromeos/file_manager/share_dialog_mock/main.js

Issue 22185002: Add browser test to the sharing dialog feature in Files.app. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed jsdoc. 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/chromeos/file_manager/share_dialog_mock/main.js
diff --git a/chrome/test/data/chromeos/file_manager/share_dialog_mock/main.js b/chrome/test/data/chromeos/file_manager/share_dialog_mock/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..315261af44eae998114ec3d45a3e5434e93b76a5
--- /dev/null
+++ b/chrome/test/data/chromeos/file_manager/share_dialog_mock/main.js
@@ -0,0 +1,151 @@
+// Namespace for the share_dialog mock.
+var share_dialog = {};
yoshiki 2013/08/06 01:17:01 Name of namespace should be camelCase.
mtomasz 2013/08/06 02:02:35 Done.
+
+/**
+ * Origin of Files.app.
+ * @type {string}
+ * @const
+ */
+share_dialog.EMBEDDER_ORIGIN =
+ 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj';
+
+/**
+ * Target width of the sharing window in pixels.
+ * @type {number}
+ * @const
+ */
+share_dialog.TARGET_WIDTH = 350;
+
+/**
+ * Target height of the sharing window in pixels.
+ * @type {number}
+ * @const
+ */
+share_dialog.TARGET_HEIGHT = 250;
+
+/**
+ * Target window of Files.app. Used to communicate over messages. Filled out
+ * once the first message from the embedder arrives.
+ * @type {Window}
+ */
+share_dialog.embedderTarget = null;
+
+/**
+ * List of pending messages enqueued to be sent before establishing the target.
+ * @type {Array.<Object>}
+ */
+share_dialog.pendingMessages = [];
+
+/**
+ * Sends a message to the embedder. If the embedder target is not available,
+ * then enqueues them. Such enqueued messages will be sent as soon as the target
+ * is available.
+ *
+ * @param {string} type Message identifier
+ * @param {Object=} opt_args Arguments for the message.
+ * @private
+ */
+share_dialog.sendMessage_ = function(type, opt_args) {
+ if (!share_dialog.embedderTarget) {
+ share_dialog.pendingMessages.push({type: type, args: opt_args});
+ return;
+ }
+
+ var data = {};
+ data.type = type;
+ if (opt_args)
+ data.args = args;
yoshiki 2013/08/06 01:17:01 opt_args?
mtomasz 2013/08/06 02:02:35 Oops! Done.
+
+ share_dialog.embedderTarget.postMessage(JSON.stringify(data),
+ share_dialog.EMBEDDER_ORIGIN);
yoshiki 2013/08/06 01:17:01 nit: indentation
mtomasz 2013/08/06 02:02:35 Done.
+};
+
+/**
+ * Handles a request from the embedder to make the body visible.
+ * @private
+ */
+share_dialog.onMakeBodyVisible_ = function() {
+ document.body.style.display = '';
+};
+
+/**
+ * Handles an event from the embedder than preparation to show the contents
+ * is done.
+ * @private
+ */
+share_dialog.onPrepareComplete_ = function() {
+ share_dialog.resize();
+};
+
+/**
+ * Handles an event from the embedder than preparation resize the window is
+ * done.
+ * @private
+ */
+share_dialog.onResizeComplete_ = function() {
+ var container = document.querySelector('#container');
+ container.style.width = share_dialog.TARGET_WIDTH + 'px';
+ container.style.height = share_dialog.TARGET_HEIGHT + 'px';
+};
+
+/**
+ * Prepares the embedder to make the contents visible.
+ */
+share_dialog.prepareForVisible = function() {
+ share_dialog.sendMessage_('prepareForVisible');
+};
+
+/**
+ * Resizes the embedder to the content window dimensions.
+ */
+share_dialog.resize = function() {
+ share_dialog.sendMessage_('prepareForResize');
+};
+
+/**
+ * Handles messages sent by the embedder. If it is the first message, then
+ * the target is established and all enqueued messages to be sent to the
+ * embedder are sent before handling the message from the embedder.
+ *
+ * @param {Event} message Message event.
+ * @private
+ */
+share_dialog.onMessage_ = function(message) {
+ if (message.origin != share_dialog.EMBEDDER_ORIGIN)
+ return;
+
+ if (!share_dialog.embedderTarget) {
+ share_dialog.embedderTarget = message.source;
+ for (var i = 0; i < share_dialog.pendingMessages.length; i++) {
+ share_dialog.sendMessage_(share_dialog.pendingMessages[i].type,
+ share_dialog.pendingMessages[i].args);
yoshiki 2013/08/06 01:17:01 nit: indentation is off.
mtomasz 2013/08/06 02:02:35 Done.
+ }
+ share_dialog.pendingMessages = [];
+ }
+
+ var packet = JSON.parse(message.data)
+ var type = packet.type;
+ var args = packet.args;
+
+ switch (type) {
+ case 'makeBodyVisible':
+ share_dialog.onMakeBodyVisible_(args);
+ break;
+ case 'prepareComplete':
+ share_dialog.onPrepareComplete_(args);
+ break;
+ case 'resizeComplete':
+ share_dialog.onResizeComplete_(args);
+ break;
+ }
+};
+
+/**
+ * Initializes the mocked share dialog.
+ */
+share_dialog.initialize = function() {
+ window.addEventListener('message', share_dialog.onMessage_);
+ share_dialog.prepareForVisible();
+};
+
+window.addEventListener('load', share_dialog.initialize);

Powered by Google App Engine
This is Rietveld 408576698