1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file. 4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)'use strict'; 6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {WebView} webView Web View tag. 90f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param {?string} ext File extension. 100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param {?string} mime File mime type. 110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * @param {?string} searchQuery Search query. 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {number} width Width of the CWS widget. 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {number} height Height of the CWS widget. 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} url Share Url for an entry. 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} target Target (scheme + host + port) of the widget. 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @constructor 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)function CWSContainerClient( 190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) webView, ext, mime, searchQuery, width, height, url, target) { 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_ = webView; 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) this.ext_ = (ext && ext[0] == '.') ? ext.substr(1) : ext; 22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.mime_ = mime; 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) this.searchQuery_ = searchQuery; 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.width_ = width; 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.height_ = height; 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.url_ = url; 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.target_ = target; 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.loaded_ = false; 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.loading_ = false; 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.onMessageBound_ = this.onMessage_.bind(this); 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.onLoadStopBound_ = this.onLoadStop_.bind(this); 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.onLoadAbortBound_ = this.onLoadAbort_.bind(this); 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype = { 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) __proto__: cr.EventTarget.prototype 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Events CWSContainerClient fires 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @enum {string} 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @const 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CWSContainerClient.Events = { 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LOADED: 'CWSContainerClient.Events.LOADED', 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LOAD_FAILED: 'CWSContainerClient.Events.LOAD_FAILED', 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) REQUEST_INSTALL: 'CWSContainerClient.Events.REQUEST_INSTALL' 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)Object.freeze(CWSContainerClient.Events); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/** 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Handles messages from the widget 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {Event} event Message event. 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.onMessage_ = function(event) { 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (event.origin != this.target_) 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return; 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) var data = event.data; 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) switch (data['message']) { 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case 'widget_loaded': 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this.onWidgetLoaded_(); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case 'widget_load_failed': 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this.onWidgetLoadFailed_(); 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case 'before_install': 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.sendInstallRequest_(data['item_id']); 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) default: 75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) console.error('Unexpected message: ' + data['message'], data); 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Called when receiving 'loadstop' event from the <webview>. 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {Event} event Message event. 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.onLoadStop_ = function(event) { 85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (this.url_ == this.webView_.src && !this.loaded_) { 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.loaded_ = true; 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postInitializeMessage_(); 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Called when the widget is loaded successfully. 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @private 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CWSContainerClient.prototype.onWidgetLoaded_ = function() { 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) cr.dispatchSimpleEvent(this, CWSContainerClient.Events.LOADED); 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/** 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Called when the widget is failed to load. 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @private 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CWSContainerClient.prototype.onWidgetLoadFailed_ = function() { 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this.sendWidgetLoadFailed_(); 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/** 108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Called when receiving the 'loadabort' event from <webview>. 109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {Event} event Message event. 110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.onLoadAbort_ = function(event) { 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this.sendWidgetLoadFailed_(); 114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Called when the installation is completed from the suggest-app dialog. 118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * 119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {boolean} result True if the installation is success, false if failed. 120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} itemId Item id to be installed. 121424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.onInstallCompleted = function(result, itemId) { 123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (result) 124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postInstallSuccessMessage_(itemId); 125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) else 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postInstallFailureMessage_(itemId); 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Send the fail message to the suggest-app dialog. 131424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)CWSContainerClient.prototype.sendWidgetLoadFailed_ = function() { 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) cr.dispatchSimpleEvent(this, CWSContainerClient.Events.LOAD_FAILED); 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Send the install request to the suggest-app dialog. 139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * 140424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} itemId Item id to be installed. 141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 142424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.sendInstallRequest_ = function(itemId) { 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var event = new Event(CWSContainerClient.Events.REQUEST_INSTALL); 145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) event.itemId = itemId; 146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.dispatchEvent(event); 147424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 149424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 150424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Send the 'install_failure' message to the widget. 151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} itemId Item id to be installed. 153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.postInstallFailureMessage_ = function(itemId) { 156424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) var message = { 157424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) message: 'install_failure', 158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) item_id: itemId, 159424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) v: 1 160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postMessage_(message); 163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Send the 'install_success' message to the widget. 167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * 168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {string} itemId Item id to be installed. 169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.postInstallSuccessMessage_ = function(itemId) { 172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) var message = { 173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) message: 'install_success', 174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) item_id: itemId, 175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) v: 1 176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postMessage_(message); 179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Send the 'initialize' message to the widget. 183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.postInitializeMessage_ = function() { 186424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) var message = { 187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) message: 'initialize', 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) hl: util.getCurrentLocaleOrDefault(), 189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch width: this.width_, 190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) height: this.height_, 191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) v: 1 192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (this.searchQuery_) { 1950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) message['search_query'] = this.searchQuery_; 1960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } else { 1970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) message['file_extension'] = this.ext_; 1980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) message['mime_type'] = this.mime_; 1990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 2000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.postMessage_(message); 202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 203424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Send a message to the widget. This method shouldn't be called directly, 206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * should from more specified posting function (eg. postXyzMessage_()). 207424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * 208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param {object} message Message object to be posted. 209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @private 210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.postMessage_ = function(message) { 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!this.webView_.contentWindow) 213424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return; 214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.contentWindow.postMessage(message, this.target_); 216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 217424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 219424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Loads the page to <webview>. Can be called only once. 220424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 221424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.load = function() { 222424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (this.loading_ || this.loaded_) 223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) throw new Error('Already loaded.'); 224424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.loading_ = true; 225424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.loaded_ = false; 226424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 227424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) window.addEventListener('message', this.onMessageBound_); 228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.addEventListener('loadstop', this.onLoadStopBound_); 229424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.addEventListener('loadabort', this.onLoadAbortBound_); 230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.setAttribute('src', this.url_); 231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Aborts loading of the embedded dialog and performs cleanup. 235424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 236424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.abort = function() { 237424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) window.removeEventListener('message', this.onMessageBound_); 238424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.removeEventListener('loadstop', this.onLoadStopBound_); 239424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.removeEventListener( 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 'loadabort', this.onLoadAbortBound_); 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.webView_.stop(); 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/** 245424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Cleans the dialog by removing all handlers. 246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 247424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)CWSContainerClient.prototype.dispose = function() { 248424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) this.abort(); 249424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 250