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

Side by Side Diff: extensions/renderer/resources/guest_view/guest_view.js

Issue 856563002: Added the infrastructure for surfaceProxy.onResize() and SurfaceView.onResize() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Added a bit more infrastructure than in the previous patch. Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This module implements a wrapper for a guestview that manages its 5 // This module implements a wrapper for a guestview that manages its
6 // creation, attaching, and destruction. 6 // creation, attaching, and destruction.
7 7
8 var EventBindings = require('event_bindings');
8 var GuestViewInternal = 9 var GuestViewInternal =
9 require('binding').Binding.create('guestViewInternal').generate(); 10 require('binding').Binding.create('guestViewInternal').generate();
10 var GuestViewInternalNatives = requireNative('guest_view_internal'); 11 var GuestViewInternalNatives = requireNative('guest_view_internal');
11 12
13 // Events.
14 var CreateEvent = function(name) {
15 var eventOpts = {supportsListeners: true, supportsFilters: true};
16 return new EventBindings.Event(name, undefined, eventOpts);
17 };
18 var RESIZE_EVENT = CreateEvent('guestViewInternal.onResize');
Fady Samuel 2015/01/19 23:57:01 Use Camel case instead.
paulmeyer 2015/01/20 00:24:38 Done.
19
12 // Possible states. 20 // Possible states.
13 var GUEST_STATE_ATTACHED = 2; 21 var GUEST_STATE_ATTACHED = 2;
14 var GUEST_STATE_CREATED = 1; 22 var GUEST_STATE_CREATED = 1;
15 var GUEST_STATE_START = 0; 23 var GUEST_STATE_START = 0;
16 24
17 // Error messages. 25 // Error messages.
18 var ERROR_MSG_ALREADY_ATTACHED = 'The guest has already been attached.'; 26 var ERROR_MSG_ALREADY_ATTACHED = 'The guest has already been attached.';
19 var ERROR_MSG_ALREADY_CREATED = 'The guest has already been created.'; 27 var ERROR_MSG_ALREADY_CREATED = 'The guest has already been created.';
20 var ERROR_MSG_INVALID_STATE = 'The guest is in an invalid state.'; 28 var ERROR_MSG_INVALID_STATE = 'The guest is in an invalid state.';
21 var ERROR_MSG_NOT_ATTACHED = 'The guest is not attached.'; 29 var ERROR_MSG_NOT_ATTACHED = 'The guest is not attached.';
22 var ERROR_MSG_NOT_CREATED = 'The guest has not been created.'; 30 var ERROR_MSG_NOT_CREATED = 'The guest has not been created.';
23 31
32 // Properties.
33 var PROPERTY_ON_RESIZE = 'onResize';
34
24 // Contains and hides the internal implementation details of |GuestView|, 35 // Contains and hides the internal implementation details of |GuestView|,
25 // including maintaining its state and enforcing the proper usage of its API 36 // including maintaining its state and enforcing the proper usage of its API
26 // fucntions. 37 // fucntions.
27 38 function GuestViewImpl(guestView, viewType, guestInstanceId) {
28 function GuestViewImpl(viewType, guestInstanceId) {
29 if (guestInstanceId) { 39 if (guestInstanceId) {
30 this.id = guestInstanceId; 40 this.id = guestInstanceId;
31 this.state = GUEST_STATE_CREATED; 41 this.state = GUEST_STATE_CREATED;
32 } else { 42 } else {
33 this.id = 0; 43 this.id = 0;
34 this.state = GUEST_STATE_START; 44 this.state = GUEST_STATE_START;
35 } 45 }
36 this.actionQueue = []; 46 this.actionQueue = [];
37 this.contentWindow = null; 47 this.contentWindow = null;
48 this.guestView = guestView;
38 this.pendingAction = null; 49 this.pendingAction = null;
39 this.viewType = viewType; 50 this.viewType = viewType;
40 this.internalInstanceId = 0; 51 this.internalInstanceId = 0;
52
53 this.setupOnResize();
41 } 54 }
42 55
56 // Sets up the onResize property on the GuestView.
57 GuestViewImpl.prototype.setupOnResize = function() {
58 Object.defineProperty(this.guestView, PROPERTY_ON_RESIZE, {
59 get: function() {
60 return this[PROPERTY_ON_RESIZE];
61 }.bind(this),
62 set: function(value) {
63 this[PROPERTY_ON_RESIZE] = value;
64 }.bind(this),
65 enumerable: true
66 });
67
68 this.callOnResize = function(e) {
69 if (!this[PROPERTY_ON_RESIZE]) {
70 return;
71 }
72 this[PROPERTY_ON_RESIZE](e.oldWidth, e.oldHeight, e.newWidth, e.newHeight);
73 }.bind(this);
74 };
75
43 // Callback wrapper that is used to call the callback of the pending action (if 76 // Callback wrapper that is used to call the callback of the pending action (if
44 // one exists), and then performs the next action in the queue. 77 // one exists), and then performs the next action in the queue.
45 GuestViewImpl.prototype.handleCallback = function(callback) { 78 GuestViewImpl.prototype.handleCallback = function(callback) {
46 if (callback) { 79 if (callback) {
47 callback(); 80 callback();
48 } 81 }
49 this.pendingAction = null; 82 this.pendingAction = null;
50 this.performNextAction(); 83 this.performNextAction();
51 }; 84 };
52 85
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // createGuest() callback, handle potential creation failure, and advance the 188 // createGuest() callback, handle potential creation failure, and advance the
156 // queue. 189 // queue.
157 var callbackWrapper = function(callback, guestInstanceId) { 190 var callbackWrapper = function(callback, guestInstanceId) {
158 this.id = guestInstanceId; 191 this.id = guestInstanceId;
159 192
160 // Check if creation failed. 193 // Check if creation failed.
161 if (this.id === 0) { 194 if (this.id === 0) {
162 this.state = GUEST_STATE_START; 195 this.state = GUEST_STATE_START;
163 } 196 }
164 197
198 RESIZE_EVENT.addListener(this.callOnResize, {instanceId: this.id});
165 this.handleCallback(callback); 199 this.handleCallback(callback);
166 }; 200 };
167 201
168 GuestViewInternal.createGuest(this.viewType, 202 GuestViewInternal.createGuest(this.viewType,
169 createParams, 203 createParams,
170 callbackWrapper.bind(this, callback)); 204 callbackWrapper.bind(this, callback));
171 205
172 this.state = GUEST_STATE_CREATED; 206 this.state = GUEST_STATE_CREATED;
173 }; 207 };
174 208
175 // Internal implementation of destroy(). 209 // Internal implementation of destroy().
176 GuestViewImpl.prototype.destroyImpl = function(callback) { 210 GuestViewImpl.prototype.destroyImpl = function(callback) {
177 // Check the current state. 211 // Check the current state.
178 if (!this.checkState('destroy')) { 212 if (!this.checkState('destroy')) {
179 this.handleCallback(callback); 213 this.handleCallback(callback);
180 return; 214 return;
181 } 215 }
182 216
183 if (this.state == GUEST_STATE_START) { 217 if (this.state == GUEST_STATE_START) {
184 // destroy() does nothing in this case. 218 // destroy() does nothing in this case.
185 this.handleCallback(callback); 219 this.handleCallback(callback);
186 return; 220 return;
187 } 221 }
188 222
189 GuestViewInternal.destroyGuest(this.id, 223 GuestViewInternal.destroyGuest(this.id,
190 this.handleCallback.bind(this, callback)); 224 this.handleCallback.bind(this, callback));
191 225
226 // Reset the state of the destroyed guest;
192 this.contentWindow = null; 227 this.contentWindow = null;
193 this.id = 0; 228 this.id = 0;
194 this.internalInstanceId = 0; 229 this.internalInstanceId = 0;
195 this.state = GUEST_STATE_START; 230 this.state = GUEST_STATE_START;
231 if (RESIZE_EVENT.hasListener(this.callOnResize)) {
232 RESIZE_EVENT.removeListener(this.callOnResize);
233 }
196 }; 234 };
197 235
198 // Internal implementation of detach(). 236 // Internal implementation of detach().
199 GuestViewImpl.prototype.detachImpl = function(callback) { 237 GuestViewImpl.prototype.detachImpl = function(callback) {
200 // Check the current state. 238 // Check the current state.
201 if (!this.checkState('detach')) { 239 if (!this.checkState('detach')) {
202 this.handleCallback(callback); 240 this.handleCallback(callback);
203 return; 241 return;
204 } 242 }
205 243
(...skipping 15 matching lines...) Expand all
221 } 259 }
222 260
223 GuestViewInternal.setAutoSize(this.id, autoSizeParams, 261 GuestViewInternal.setAutoSize(this.id, autoSizeParams,
224 this.handleCallback.bind(this, callback)); 262 this.handleCallback.bind(this, callback));
225 }; 263 };
226 264
227 // The exposed interface to a guestview. Exposes in its API the functions 265 // The exposed interface to a guestview. Exposes in its API the functions
228 // attach(), create(), destroy(), and getId(). All other implementation details 266 // attach(), create(), destroy(), and getId(). All other implementation details
229 // are hidden. 267 // are hidden.
230 function GuestView(viewType, guestInstanceId) { 268 function GuestView(viewType, guestInstanceId) {
231 privates(this).internal = new GuestViewImpl(viewType, guestInstanceId); 269 privates(this).internal = new GuestViewImpl(this, viewType, guestInstanceId);
232 } 270 }
233 271
234 // Attaches the guestview to the container with ID |internalInstanceId|. 272 // Attaches the guestview to the container with ID |internalInstanceId|.
235 GuestView.prototype.attach = function( 273 GuestView.prototype.attach = function(
236 internalInstanceId, viewInstanceId, attachParams, callback) { 274 internalInstanceId, viewInstanceId, attachParams, callback) {
237 var internal = privates(this).internal; 275 var internal = privates(this).internal;
238 internal.actionQueue.push(internal.attachImpl.bind( 276 internal.actionQueue.push(internal.attachImpl.bind(
239 internal, internalInstanceId, viewInstanceId, attachParams, callback)); 277 internal, internalInstanceId, viewInstanceId, attachParams, callback));
240 internal.performNextAction(); 278 internal.performNextAction();
241 }; 279 };
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 }; 317 };
280 318
281 // Returns the ID for this guestview. 319 // Returns the ID for this guestview.
282 GuestView.prototype.getId = function() { 320 GuestView.prototype.getId = function() {
283 var internal = privates(this).internal; 321 var internal = privates(this).internal;
284 return internal.id; 322 return internal.id;
285 }; 323 };
286 324
287 // Exports 325 // Exports
288 exports.GuestView = GuestView; 326 exports.GuestView = GuestView;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698