Merge pull request #981 from LarissaSmith/master

Added an option to addTiledImage to change the crossOriginPolicy.
This commit is contained in:
Ian Gilman 2016-07-28 10:15:25 -07:00 committed by GitHub
commit 469341094d
2 changed files with 72 additions and 6 deletions

View File

@ -1229,6 +1229,8 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
* browsers that support the HTML5 canvas. * browsers that support the HTML5 canvas.
* @param {Number} [options.opacity] Opacity the tiled image should be drawn at by default. * @param {Number} [options.opacity] Opacity the tiled image should be drawn at by default.
* @param {String} [options.compositeOperation] How the image is composited onto other images. * @param {String} [options.compositeOperation] How the image is composited onto other images.
* @param {String} [options.crossOriginPolicy] The crossOriginPolicy for this specific image,
* overriding viewer.crossOriginPolicy.
* @param {Function} [options.success] A function that gets called when the image is * @param {Function} [options.success] A function that gets called when the image is
* successfully added. It's passed the event object which contains a single property: * successfully added. It's passed the event object which contains a single property:
* "item", the resulting TiledImage. * "item", the resulting TiledImage.
@ -1264,6 +1266,9 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
if (options.compositeOperation === undefined) { if (options.compositeOperation === undefined) {
options.compositeOperation = this.compositeOperation; options.compositeOperation = this.compositeOperation;
} }
if (options.crossOriginPolicy === undefined) {
options.crossOriginPolicy = options.tileSource.crossOriginPolicy !== undefined ? options.tileSource.crossOriginPolicy : this.crossOriginPolicy;
}
var myQueueItem = { var myQueueItem = {
options: options options: options
@ -1326,7 +1331,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
this._loadQueue.push(myQueueItem); this._loadQueue.push(myQueueItem);
getTileSourceImplementation( this, options.tileSource, function( tileSource ) { getTileSourceImplementation( this, options.tileSource, options, function( tileSource ) {
myQueueItem.tileSource = tileSource; myQueueItem.tileSource = tileSource;
@ -1376,7 +1381,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
minPixelRatio: _this.minPixelRatio, minPixelRatio: _this.minPixelRatio,
smoothTileEdgesMinZoom: _this.smoothTileEdgesMinZoom, smoothTileEdgesMinZoom: _this.smoothTileEdgesMinZoom,
iOSDevice: _this.iOSDevice, iOSDevice: _this.iOSDevice,
crossOriginPolicy: _this.crossOriginPolicy, crossOriginPolicy: queueItem.options.crossOriginPolicy,
debugMode: _this.debugMode debugMode: _this.debugMode
}); });
@ -2110,7 +2115,7 @@ function _getSafeElemSize (oElement) {
* @function * @function
* @private * @private
*/ */
function getTileSourceImplementation( viewer, tileSource, successCallback, function getTileSourceImplementation( viewer, tileSource, imgOptions, successCallback,
failCallback ) { failCallback ) {
var _this = viewer; var _this = viewer;
@ -2144,7 +2149,8 @@ function getTileSourceImplementation( viewer, tileSource, successCallback,
//If its still a string it means it must be a url at this point //If its still a string it means it must be a url at this point
tileSource = new $.TileSource({ tileSource = new $.TileSource({
url: tileSource, url: tileSource,
crossOriginPolicy: viewer.crossOriginPolicy, crossOriginPolicy: imgOptions.crossOriginPolicy !== undefined ?
imgOptions.crossOriginPolicy : viewer.crossOriginPolicy,
ajaxWithCredentials: viewer.ajaxWithCredentials, ajaxWithCredentials: viewer.ajaxWithCredentials,
useCanvas: viewer.useCanvas, useCanvas: viewer.useCanvas,
success: function( event ) { success: function( event ) {
@ -2156,8 +2162,10 @@ function getTileSourceImplementation( viewer, tileSource, successCallback,
} ); } );
} else if ($.isPlainObject(tileSource) || tileSource.nodeType) { } else if ($.isPlainObject(tileSource) || tileSource.nodeType) {
if (!tileSource.crossOriginPolicy && viewer.crossOriginPolicy) { if (tileSource.crossOriginPolicy === undefined &&
tileSource.crossOriginPolicy = viewer.crossOriginPolicy; (imgOptions.crossOriginPolicy !== undefined || viewer.crossOriginPolicy !== undefined)) {
tileSource.crossOriginPolicy = imgOptions.crossOriginPolicy !== undefined ?
imgOptions.crossOriginPolicy : viewer.crossOriginPolicy;
} }
if (tileSource.ajaxWithCredentials === undefined) { if (tileSource.ajaxWithCredentials === undefined) {
tileSource.ajaxWithCredentials = viewer.ajaxWithCredentials; tileSource.ajaxWithCredentials = viewer.ajaxWithCredentials;

View File

@ -365,4 +365,62 @@
} ); } );
asyncTest( 'CrossOriginPolicyOption', function () {
browserSupportsImgCrossOrigin(function(supported) {
if (!supported) {
expect(0);
start();
} else {
viewer.crossOriginPolicy = "Anonymous";
viewer.smoothTileEdgesMinZoom = Infinity;
viewer.addTiledImage( {
tileSource: {
type: 'legacy-image-pyramid',
levels: [ {
url: corsImg,
width: 135,
height: 155
} ]
},
crossOriginPolicy : false
} );
viewer.addHandler('tile-drawn', function() {
ok(OpenSeadragon.isCanvasTainted(viewer.drawer.context.canvas),
"Canvas should be tainted.");
start();
});
}
});
} );
asyncTest( 'CrossOriginPolicyTileSource', function () {
browserSupportsImgCrossOrigin(function(supported) {
if (!supported) {
expect(0);
start();
} else {
viewer.crossOriginPolicy = false;
viewer.smoothTileEdgesMinZoom = Infinity;
viewer.addTiledImage( {
tileSource: {
type: 'legacy-image-pyramid',
levels: [ {
url: corsImg,
width: 135,
height: 155
} ],
crossOriginPolicy : "Anonymous"
}
} );
viewer.addHandler('tile-drawn', function() {
ok(!OpenSeadragon.isCanvasTainted(viewer.drawer.context.canvas),
"Canvas should not be tainted.");
start();
});
}
});
} );
})(); })();