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

Side by Side Diff: chrome/browser/resources/file_manager/js/share_client.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 /**
8 * @param {WebView} webView Web View tag.
9 * @param {string} url Share Url for an entry.
10 * @param {ShareClient.Observer} observer Observer instance.
11 * @constructor
12 */
13 function ShareClient(webView, url, observer) {
14 this.webView_ = webView;
15 this.url_ = url;
16 this.observer_ = observer;
17 this.loaded_ = false;
18 this.loading_ = false;
19 this.onMessageBound_ = this.onMessage_.bind(this);
20 this.onLoadStopBound_ = this.onLoadStop_.bind(this);
21 this.onLoadAbortBound_ = this.onLoadAbort_.bind(this);
22 }
23
24 /**
25 * Source origin of the client.
26 * @type {string}
27 * @const
28 */
29 ShareClient.SHARE_ORIGIN =
30 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj';
31
32 /**
33 * Target origin of the embedded dialog.
34 * @type {string}
35 * @const
36 */
37 ShareClient.SHARE_TARGET = 'https://drive.google.com';
38
39 /**
40 * Observes for state changes of the embedded dialog.
41 * @interface
42 */
43 ShareClient.Observer = function() {
44 };
45
46 /**
47 * Notifies about the embedded dialog being loaded.
48 */
49 ShareClient.Observer.prototype.onLoaded = function() {
50 };
51
52 /**
53 * Notifies when the the embedded dialog failed to load.
54 */
55 ShareClient.Observer.prototype.onLoadingFailed = function() {
56 };
57
58 /**
59 * Notifies about changed dimensions of the embedded dialog.
60 * @param {number} width Width in pixels.
61 * @param {number} height Height in pixels.
62 * @param {function()} callback Completion callback. Call when finished
63 * handling the resize.
64 */
65 ShareClient.Observer.prototype.onResized = function(width, height, callback) {
66 };
67
68 /**
69 * Notifies about the embedded dialog being closed.
70 */
71 ShareClient.Observer.prototype.onClosed = function() {
72 };
73
74 /**
75 * Handles messages from the embedded dialog.
76 * @param {Event} e Message event.
77 * @private
78 */
79 ShareClient.prototype.onMessage_ = function(e) {
80 if (e.origin != ShareClient.SHARE_TARGET && !window.IN_TEST) {
81 // Logs added temporarily to track crbug.com/288783.
82 console.debug('Received a message from an illegal origin: ' + e.origin);
83 return;
84 }
85
86 var data = JSON.parse(e.data);
87 // Logs added temporarily to track crbug.com/288783.
88 console.debug('Received message: ' + data.type);
89
90 switch (data.type) {
91 case 'resize':
92 this.observer_.onResized(data.args.width,
93 data.args.height,
94 this.postMessage_.bind(this, 'resizeComplete'));
95 break;
96 case 'prepareForVisible':
97 this.postMessage_('prepareComplete');
98 if (!this.loaded_) {
99 this.loading_ = false;
100 this.loaded_ = true;
101 this.observer_.onLoaded();
102 }
103 break;
104 case 'setVisible':
105 if (!data.args.visible)
106 this.observer_.onClosed();
107 break;
108 }
109 };
110
111 /**
112 * Handles completion of the web view request.
113 * @param {Event} e Message event.
114 * @private
115 */
116 ShareClient.prototype.onLoadStop_ = function(e) {
117 // Logs added temporarily to track crbug.com/288783.
118 console.debug('Web View loaded.');
119
120 this.postMessage_('makeBodyVisible');
121 };
122
123 /**
124 * Handles termination of the web view request.
125 * @param {Event} e Message event.
126 * @private
127 */
128 ShareClient.prototype.onLoadAbort_ = function(e) {
129 // Logs added temporarily to track crbug.com/288783.
130 console.debug('Web View failed to load with error: ' + e.reason + ', url: ' +
131 e.url + ' while requested: ' + this.url_);
132
133 this.observer_.onLoadFailed();
134 };
135
136 /**
137 * Sends a message to the embedded dialog.
138 * @param {string} type Message type.
139 * @param {Object=} opt_args Optional arguments.
140 * @private
141 */
142 ShareClient.prototype.postMessage_ = function(type, opt_args) {
143 // Logs added temporarily to track crbug.com/288783.
144 console.debug('Sending message: ' + type);
145
146 var message = {
147 type: type,
148 args: opt_args
149 };
150 this.webView_.contentWindow.postMessage(
151 JSON.stringify(message),
152 !window.IN_TEST ? ShareClient.SHARE_TARGET : '*');
153 };
154
155 /**
156 * Loads the embedded dialog. Can be called only one.
157 */
158 ShareClient.prototype.load = function() {
159 if (this.loading_ || this.loaded_)
160 throw new Error('Already loaded.');
161 this.loading_ = true;
162
163 // Logs added temporarily to track crbug.com/288783.
164 console.debug('Loading.');
165
166 window.addEventListener('message', this.onMessageBound_);
167 this.webView_.addEventListener('loadstop', this.onLoadStopBound_);
168 this.webView_.addEventListener('loadabort', this.onLoadAbortBound_);
169 this.webView_.setAttribute('src', this.url_);
170 };
171
172 /**
173 * Aborts loading of the embedded dialog and performs cleanup.
174 */
175 ShareClient.prototype.abort = function() {
176 window.removeEventListener('message', this.onMessageBound_);
177 this.webView_.removeEventListener('loadstop', this.onLoadStopBound_);
178 this.webView_.removeEventListener(
179 'loadabort', this.onLoadAbortBound_);
180 this.webView_.stop();
181 };
182
183 /**
184 * Cleans the dialog by removing all handlers.
185 */
186 ShareClient.prototype.dispose = function() {
187 this.abort();
188 };
OLDNEW
« no previous file with comments | « chrome/browser/resources/file_manager/js/scrollbar.js ('k') | chrome/browser/resources/file_manager/js/share_dialog.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698