Package com.google.gwt.core.linker
Class CrossSiteIframeLinker
- java.lang.Object
-
- com.google.gwt.core.ext.Linker
-
- com.google.gwt.core.ext.linker.AbstractLinker
-
- com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
- com.google.gwt.core.linker.CrossSiteIframeLinker
-
- Direct Known Subclasses:
DirectInstallLinker
@LinkerOrder(PRIMARY) @Shardable public class CrossSiteIframeLinker extends com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
This linker uses an iframe to hold the code and a script tag to download the code. It can download code cross-site, because it uses a script tag to download it and because it never uses XHR. The iframe, meanwhile, makes it trivial to install additional code as the app runs.
-
-
Constructor Summary
Constructors Constructor Description CrossSiteIframeLinker()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.String
fillSelectionScriptTemplate(java.lang.StringBuffer ss, TreeLogger logger, LinkerContext context, ArtifactSet artifacts, CompilationResult result)
Generate a selection script.protected boolean
getBooleanConfigurationProperty(LinkerContext context, java.lang.String name, boolean def)
protected java.lang.String
getCompilationExtension(TreeLogger logger, LinkerContext context)
protected java.lang.String
getDeferredFragmentSuffix2(TreeLogger logger, LinkerContext context, int fragment, java.lang.String strongName)
Returns the suffix at the end of a JavaScript fragment other than the initial fragment.java.lang.String
getDescription()
Returns a human-readable String describing the Linker.protected java.lang.String
getHostedFilename()
protected java.lang.String
getHostedFilenameFull(LinkerContext context)
protected java.lang.String
getJsComputeScriptBase(LinkerContext context)
Returns the name of theComputeScriptBase
script.protected java.lang.String
getJsComputeUrlForResource(LinkerContext context)
Returns the name of theUrlForResource
script.protected java.lang.String
getJsDevModeRedirectHook(LinkerContext context)
Returns a JavaScript fragment that starts Super Dev Mode, if enabled.protected java.lang.String
getJsDevModeRedirectHookPermitted(LinkerContext context)
Returns a JavaScript expression that determines whether Super Dev Mode may be turned on for the current page.protected java.lang.String
getJsDevModeUrlValidation(LinkerContext context)
Returns a JavaScript fragment that validates "devModeUrl"—the URL that Super Dev Mode's JavaScript is loaded from—before it's used.protected java.lang.String
getJsInstallLocation(LinkerContext context)
Returns the name of theJsInstallLocation
script.protected java.lang.String
getJsInstallScript(LinkerContext context)
Returns the name of theJsInstallScript
script.protected java.lang.String
getJsIsBodyLoaded(LinkerContext context)
Returns the name of theJsIsBodyLoaded
script.protected java.lang.String
getJsLoadExternalStylesheets(LinkerContext context)
Returns the name of theJsLoadExternalStylesheets
script.protected java.lang.String
getJsModuleFunctionErrorCatch(LinkerContext context)
Returns the name of theJsModuleFunctionErrorCatch
script.protected java.lang.String
getJsPermutations(LinkerContext context)
Returns the name of theJsPermutations
script.protected java.lang.String
getJsProcessMetas(LinkerContext context)
Returns the name of theJsProcessMetas
script.protected java.lang.String
getJsProperties(LinkerContext context)
Returns the name of theJsProperties
script.protected java.lang.String
getJsRunAsync(LinkerContext context)
Returns the name of theJsRunAsync
script.protected java.lang.String
getJsWaitForBodyLoaded(LinkerContext context)
Returns the name of theJsWaitForBodyLoaded
script.protected java.lang.String
getModulePrefix(TreeLogger logger, LinkerContext context, java.lang.String strongName)
Compute the beginning of a JavaScript file that will hold the main module implementation.protected java.lang.String
getModuleSuffix2(TreeLogger logger, LinkerContext context, java.lang.String strongName)
Returns the suffix for the initial JavaScript fragment.protected java.lang.String
getScriptChunkSeparator(TreeLogger logger, LinkerContext context)
Some subclasses support "chunking" of the primary fragment.protected java.lang.String
getSelectionScriptTemplate(TreeLogger logger, LinkerContext context)
protected java.lang.String
getSourceMapUrl(LinkerContext context, java.lang.String strongName, int fragmentId)
Returns the sourcemap URL that will be put in the comment at the end of a JavaScript fragment, or null if the comment should be omitted.protected java.lang.String
getStringConfigurationProperty(LinkerContext context, java.lang.String name, java.lang.String def)
protected void
includeJs(java.lang.StringBuffer selectionScript, TreeLogger logger, java.lang.String jsSource, java.lang.String templateVar)
protected void
maybeAddHostedModeFile(TreeLogger logger, LinkerContext context, ArtifactSet artifacts, CompilationResult result)
Add the Development Mode file to the artifact set.protected void
maybeOutputPropertyMap(TreeLogger logger, LinkerContext context, ArtifactSet toReturn)
protected boolean
shouldIncludeBootstrapInPrimaryFragment(LinkerContext context)
protected boolean
shouldInstallCode(LinkerContext context)
Determines the strategy for installing JavaScript code into the iframe.protected boolean
shouldUseSelfForWindowAndDocument(LinkerContext context)
Returns whether to use "self" for $wnd and $doc references.protected java.lang.String
wrapDeferredFragment(TreeLogger logger, LinkerContext context, int fragment, java.lang.String js, ArtifactSet artifacts)
protected java.lang.String
wrapPrimaryFragment(TreeLogger logger, LinkerContext context, java.lang.String script, ArtifactSet artifacts, CompilationResult result)
-
Methods inherited from class com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
charsPerChunk, doEmitCompilation, emitSelectionInformation, emitSelectionScript, generateDeferredFragment, generatePrimaryFragment, generatePrimaryFragmentString, generateSelectionScript, generateSelectionScript, getDeferredFragmentPrefix, getFragmentSubdir, getModulePrefix, link, link, readFileToStringBuffer, replaceAll, splitPrimaryJavaScript, supportsDevModeInJunit
-
Methods inherited from class com.google.gwt.core.ext.linker.AbstractLinker
emitBytes, emitBytes, emitInputStream, emitInputStream, emitString, emitString, emitWithStrongName, emitWithStrongName
-
Methods inherited from class com.google.gwt.core.ext.Linker
isShardable, relink
-
-
-
-
Method Detail
-
getDescription
public java.lang.String getDescription()
Description copied from class:Linker
Returns a human-readable String describing the Linker.- Specified by:
getDescription
in classLinker
-
fillSelectionScriptTemplate
protected java.lang.String fillSelectionScriptTemplate(java.lang.StringBuffer ss, TreeLogger logger, LinkerContext context, ArtifactSet artifacts, CompilationResult result) throws UnableToCompleteException
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Generate a selection script. The selection information should previously have been scanned usingPermutationsUtil.setupPermutationsMap(ArtifactSet)
.- Overrides:
fillSelectionScriptTemplate
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
- Throws:
UnableToCompleteException
-
getBooleanConfigurationProperty
protected boolean getBooleanConfigurationProperty(LinkerContext context, java.lang.String name, boolean def)
-
getCompilationExtension
protected java.lang.String getCompilationExtension(TreeLogger logger, LinkerContext context)
- Specified by:
getCompilationExtension
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getDeferredFragmentSuffix2
protected java.lang.String getDeferredFragmentSuffix2(TreeLogger logger, LinkerContext context, int fragment, java.lang.String strongName)
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Returns the suffix at the end of a JavaScript fragment other than the initial fragment.- Overrides:
getDeferredFragmentSuffix2
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getHostedFilename
protected java.lang.String getHostedFilename()
- Overrides:
getHostedFilename
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getHostedFilenameFull
protected java.lang.String getHostedFilenameFull(LinkerContext context)
-
getJsComputeScriptBase
protected java.lang.String getJsComputeScriptBase(LinkerContext context)
Returns the name of theComputeScriptBase
script. By default, returns"com/google/gwt/core/ext/linker/impl/computeScriptBase.js"
.- Parameters:
context
- a LinkerContext
-
getJsComputeUrlForResource
protected java.lang.String getJsComputeUrlForResource(LinkerContext context)
Returns the name of theUrlForResource
script. By default, returns"com/google/gwt/core/ext/linker/impl/computeUrlForResource.js"
.- Parameters:
context
- a LinkerContext
-
getJsDevModeRedirectHook
protected java.lang.String getJsDevModeRedirectHook(LinkerContext context)
Returns a JavaScript fragment that starts Super Dev Mode, if enabled. (May return either the JavaScript itself or the name of a Java resource ending with ".js".)
-
getJsDevModeUrlValidation
protected java.lang.String getJsDevModeUrlValidation(LinkerContext context)
Returns a JavaScript fragment that validates "devModeUrl"—the URL that Super Dev Mode's JavaScript is loaded from—before it's used. The variable may be modified to change what what URL is loaded, or it maybe be set to "" to disable completely. (May return either the JavaScript itself or the name of a Java resource ending with ".js".)
-
getJsDevModeRedirectHookPermitted
protected java.lang.String getJsDevModeRedirectHookPermitted(LinkerContext context)
Returns a JavaScript expression that determines whether Super Dev Mode may be turned on for the current page. (May return either the JavaScript itself or the name of a Java resource ending with ".js".)The default implementation allows Super Dev Mode only on http: and file: pages. It could be overridden to implement a blacklist or whitelist of hostnames where Super Dev Mode may run. As a safety precaution, it's recommended to return false for https and for the hostnames in URL's visited by end users.
If you override this method to allow https, it probably won't work anyway because browsers often disallow loading JavaScript from http URL's into https pages. To make it work, you will also have to find a way to run the code server using https.
-
getJsInstallLocation
protected java.lang.String getJsInstallLocation(LinkerContext context)
Returns the name of theJsInstallLocation
script. By default, returns"com/google/gwt/core/ext/linker/impl/installLocationIframe.js"
.- Parameters:
context
- a LinkerContext
-
getJsInstallScript
protected java.lang.String getJsInstallScript(LinkerContext context)
Returns the name of theJsInstallScript
script. The default is chosen based on the value ofshouldInstallCode(com.google.gwt.core.ext.LinkerContext)
.If you override this, verify that
shouldInstallCode(com.google.gwt.core.ext.LinkerContext)
is set consistently or fragment loading won't work.
-
getJsIsBodyLoaded
protected java.lang.String getJsIsBodyLoaded(LinkerContext context)
Returns the name of theJsIsBodyLoaded
script. By default, returns"com/google/gwt/core/ext/linker/impl/isBodyLoaded.js"
.- Parameters:
context
- a LinkerContext
-
getJsLoadExternalStylesheets
protected java.lang.String getJsLoadExternalStylesheets(LinkerContext context)
Returns the name of theJsLoadExternalStylesheets
script. By default, returns"com/google/gwt/core/ext/linker/impl/loadExternalStylesheets.js"
.- Parameters:
context
- a LinkerContext
-
getJsModuleFunctionErrorCatch
protected java.lang.String getJsModuleFunctionErrorCatch(LinkerContext context)
Returns the name of theJsModuleFunctionErrorCatch
script. By default returns null. This script executes if there's an error loading the module function or executing it. The error will be available under a local variable named "moduleError". If non-null, the module function and the call to the module function will be placed in a try/catch block.- Parameters:
context
- a LinkerContext
-
getJsPermutations
protected java.lang.String getJsPermutations(LinkerContext context)
Returns the name of theJsPermutations
script. By default, returns"com/google/gwt/core/ext/linker/impl/permutations.js"
.- Parameters:
context
- a LinkerContext
-
getJsProcessMetas
protected java.lang.String getJsProcessMetas(LinkerContext context)
Returns the name of theJsProcessMetas
script. By default, returns"com/google/gwt/core/ext/linker/impl/processMetas.js"
.- Parameters:
context
- a LinkerContext
-
getJsProperties
protected java.lang.String getJsProperties(LinkerContext context)
Returns the name of theJsProperties
script. By default, returns"com/google/gwt/core/ext/linker/impl/properties.js"
.- Parameters:
context
- a LinkerContext
-
getJsRunAsync
protected java.lang.String getJsRunAsync(LinkerContext context)
Returns the name of theJsRunAsync
script. By default, returns"com/google/gwt/core/ext/linker/impl/runAsync.js"
.- Parameters:
context
- a LinkerContext
-
getJsWaitForBodyLoaded
protected java.lang.String getJsWaitForBodyLoaded(LinkerContext context)
Returns the name of theJsWaitForBodyLoaded
script. By default, returns"com/google/gwt/core/ext/linker/impl/waitForBodyLoaded.js"
.- Parameters:
context
- a LinkerContext
-
getModulePrefix
protected java.lang.String getModulePrefix(TreeLogger logger, LinkerContext context, java.lang.String strongName) throws UnableToCompleteException
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Compute the beginning of a JavaScript file that will hold the main module implementation.- Specified by:
getModulePrefix
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
- Throws:
UnableToCompleteException
-
getModuleSuffix2
protected java.lang.String getModuleSuffix2(TreeLogger logger, LinkerContext context, java.lang.String strongName)
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Returns the suffix for the initial JavaScript fragment.- Overrides:
getModuleSuffix2
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getScriptChunkSeparator
protected java.lang.String getScriptChunkSeparator(TreeLogger logger, LinkerContext context)
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Some subclasses support "chunking" of the primary fragment. If chunking will be supported, this function should be overridden to return the string which should be inserted between each chunk.- Overrides:
getScriptChunkSeparator
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getSelectionScriptTemplate
protected java.lang.String getSelectionScriptTemplate(TreeLogger logger, LinkerContext context)
- Specified by:
getSelectionScriptTemplate
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
getSourceMapUrl
protected java.lang.String getSourceMapUrl(LinkerContext context, java.lang.String strongName, int fragmentId)
Returns the sourcemap URL that will be put in the comment at the end of a JavaScript fragment, or null if the comment should be omitted. The default implementation uses the includeSourceMapUrl config property.
-
getStringConfigurationProperty
protected java.lang.String getStringConfigurationProperty(LinkerContext context, java.lang.String name, java.lang.String def)
-
includeJs
protected void includeJs(java.lang.StringBuffer selectionScript, TreeLogger logger, java.lang.String jsSource, java.lang.String templateVar) throws UnableToCompleteException
- Throws:
UnableToCompleteException
-
maybeAddHostedModeFile
protected void maybeAddHostedModeFile(TreeLogger logger, LinkerContext context, ArtifactSet artifacts, CompilationResult result) throws UnableToCompleteException
Description copied from class:com.google.gwt.core.ext.linker.impl.SelectionScriptLinker
Add the Development Mode file to the artifact set.- Overrides:
maybeAddHostedModeFile
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
- Throws:
UnableToCompleteException
-
maybeOutputPropertyMap
protected void maybeOutputPropertyMap(TreeLogger logger, LinkerContext context, ArtifactSet toReturn)
- Overrides:
maybeOutputPropertyMap
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
shouldIncludeBootstrapInPrimaryFragment
protected boolean shouldIncludeBootstrapInPrimaryFragment(LinkerContext context)
-
shouldInstallCode
protected boolean shouldInstallCode(LinkerContext context)
Determines the strategy for installing JavaScript code into the iframe. If set to false, a <script> tag pointing to the js file is added directly to the iframe. Otherwise, GWT downloads the JavaScript code as a list of strings and then adds it to the iframe.
-
shouldUseSelfForWindowAndDocument
protected boolean shouldUseSelfForWindowAndDocument(LinkerContext context)
Returns whether to use "self" for $wnd and $doc references. Defaults to false. Useful for worker threads.
-
wrapDeferredFragment
protected java.lang.String wrapDeferredFragment(TreeLogger logger, LinkerContext context, int fragment, java.lang.String js, ArtifactSet artifacts)
- Overrides:
wrapDeferredFragment
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
-
wrapPrimaryFragment
protected java.lang.String wrapPrimaryFragment(TreeLogger logger, LinkerContext context, java.lang.String script, ArtifactSet artifacts, CompilationResult result) throws UnableToCompleteException
- Overrides:
wrapPrimaryFragment
in classcom.google.gwt.core.ext.linker.impl.SelectionScriptLinker
- Throws:
UnableToCompleteException
-
-