I appreciate that we aren't replicating the true production
environment and I'm actually trying to figure out a way to do testing
from the server while maintaining developer productivity, but the
question remains:

Does Flash player allow a Application SWF hosted by the filesystem
load a module hosted over HTTP?  If so, what needs to be changed with
my very basic example code in the original message?



--- In [email protected], Alex Harui <aha...@...> wrote:
>
> Our automated testing harness launches the app in a browser at
http://localhost:xxxx/foo.html so it runs in the deployed security
environment.  Otherwise, we always find surprises when we finally do
deploy.  If your final config is to deploy over http, I would find a 
way to do that from your harness.
> 
> From: [email protected] [mailto:[email protected]]
On Behalf Of hughesmatt78
> Sent: Saturday, December 20, 2008 6:11 AM
> To: [email protected]
> Subject: [flexcoders] Re: Loading network SWFs from SWF hosted on
filesystem (SWF is not a loadable module
> 
> 
> I understand it's not a common configuration and I don't plan on
> deploying my modules like this. The reason I want a local Application
> SWF to load a remote module SWF is because I need to run my
> integration tests on my local machine. The tests run against the web
> application that serves the module SWFs. However, even though they
> are both on my machine, the Application SWF loads from the filesystem,
> whereas the modules are loaded from http://localhost.
> 
> So to recap, I've tried running with localTrusted,
> localWithNetworking. I have the most permissive crossdomain.xml on
> the server where the modules live. I've tried several different
> permutations of setting the ApplicationDomain. I've even tried
> setting the SecurityDomain as I said in my previous post though
> apparently a local SWF is just not allowed to do that.
> 
> I did see something very briefly mentioned in the Adobe Flash Player
> docs about setting DisableLocalSecurity/EnableLocalSecurity API calls
> but I believe those are API calls of the player, not of the SDK and I
> haven't figured out how I could call those methods on the plugin in
> Firefox.
> 
> Any other ideas? The Adobe docs really do indicate that this
> configuration is possible yet I have yet to see anywhere where someone
> has got this working. Am I chasing something that can't be done? Are
> the docs wrong (see my initial post in this thread)?
> 
> --- In
[email protected]<mailto:flexcoders%40yahoogroups.com>, Alex
Harui <aharui@> wrote:
> >
> > I was unclear you needed to load from different domains. I don't
> know how you would get your current configuration to work when
> deployed over HTTP unless the module and main swf were on the same
> domain, and in such a case, relative URLs would be better.
> >
> > I think you are caught in one of those scenarios I described. In
> order to use cross-domain modules, you need to set
> SecurityDomain.currentDomain and thus can only test when deployed over
> HTTP. For security reasons, cross-domain modules is not a common
> configuration.
> >
> > From:
[email protected]<mailto:flexcoders%40yahoogroups.com>
[mailto:[email protected]<mailto:flexcoders%40yahoogroups.com>]
> On Behalf Of hughesmatt78
> > Sent: Monday, December 15, 2008 11:59 AM
> > To: [email protected]<mailto:flexcoders%40yahoogroups.com>
> > Subject: [flexcoders] Re: Loading network SWFs from SWF hosted on
> filesystem (SWF is not a loadable module
> >
> >
> > How could I use relative URLs when I am purposely loading from a
> > different domain. Again, I need to run the Application SWF from the
> > filesystem and load the module from http://localhost (or some other
> > domain).
> >
> > As far as setting the SecurityDomain.currentDomain, I have tried doing
> > that, only to get this error:
> >
> > SecurityError: Error #2142: Security sandbox violation: local SWF
> > files cannot use the LoaderContext.securityDomain property.
> >
>
file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf>
> > was attempting to load http://localhost/SimpleModuleProject.swf.
> > at flash.display::Loader/_load()
> > at flash.display::Loader/load()
> > at
> >
>
ModuleInfo/load()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:431]
> > at
> >
>
ModuleInfoProxy/load()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:986]
> >
> > --- In
>
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>,
Alex
> Harui <aharui@> wrote:
> > >
> > > Typically, you want to test in local-trusted instead of
> > local-with-networking and use relative paths to all assets (and have
> > those assets in the local filesystem). Then when you deploy those
> > files to a server in the same folder configuration, everything should
> > just work.
> > >
> > > If you use an absolute path, then in local-trusted it is seen as a
> > foreign domain, and by default modules will not work unless you set
> > the SecurityDomain.currentDomain on the module loader. However, that
> > will still set up a different "topology of trust" than when you deploy
> > and the loading app is on the same server as the module.
> > >
> > > So, only use absolute paths if you'll always be loading the module
> > from a different domain. There might be issues using
> > SecurityDomain.currentDomain in local-trusted sandboxes. You can
> > sometimes get yourself into configurations that can only be tested
> > while deployed and served over http:
> > >
> > > From:
>
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
>
[mailto:[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>]
> > On Behalf Of hughesmatt78
> > > Sent: Monday, December 15, 2008 7:33 AM
> > > To:
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
> > > Subject: [flexcoders] Re: Loading network SWFs from SWF hosted on
> > filesystem (SWF is not a loadable module
> > >
> > >
> > > My sandbox type is local-trusted. According to the Flash Security
> > > white paper, local-trusted has *at least* the priviledges of
> > > local-with-networking.
> > >
> > > "localWithNetwork: This SWF file is a local file and has not been
> > > trusted by the user, but it was
> > > published with a networking designation. This SWF may
communicate with
> > > the Internet but may not
> > > read from local data sources.
> > > localTrusted: This SWF file is a local file and has been trusted by
> > > the user, using either the
> > > Settings Manager or a FlashPlayerTrust configuration file. This SWF
> > > file may both read from local
> > > data sources and communicate with the Internet.
> > > "
> > >
> > > I did change it to local-with-networking, but I get the same error:
> > >
> > > Finished loading crossdomain.
> > > <?xml version="1.0"?>
> > > <cross-domain-policy>
> > > <allow-access-from domain="*" />
> > > </cross-domain-policy>
> > >
> > > [SWF] /SimpleModuleProject.swf - 574,981 bytes after decompression
> > > *** Security Sandbox Violation ***
> > > SecurityDomain
> > >
> >
>
'file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\><file:///<file:///\\>\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf>'
> > > tried to access incompatible context
> 'http://localhost/crossdomain.xml'
> > > *** Security Sandbox Violation ***
> > > SecurityDomain
> > >
> >
>
'file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\><file:///<file:///\\>\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf>'
> > > tried to access incompatible context
> 'http://localhost/crossdomain.xml'
> > > Failed to load module
> > > SWF is not a loadable module
> > >
> > > Any ideas?
> > >
> > > --- In
> >
>
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>,
> Alex
> > Harui <aharui@> wrote:
> > > >
> > > > Check your sandboxType. I'll bet it is local-trusted and not
> > > local-with-networking.
> > > >
> > > > From:
> >
>
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
> >
>
[mailto:[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>]
> > > On Behalf Of hughesmatt78
> > > > Sent: Saturday, December 13, 2008 11:33 AM
> > > > To:
>
[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
> > > > Subject: [flexcoders] Loading network SWFs from SWF hosted on
> > > filesystem (SWF is not a loadable module
> > > >
> > > >
> > > > I'm trying so far in vain to load a module from a network domain
> from
> > > > a SWF that was loaded via the filesystem. Every time I try and
load
> > > > the module, I get the following error:
> > > >
> > > > "SWF is not a loadable module."
> > > >
> > > > I have seen this same problem discussed elsewhere on
FlexCoders and
> > > > other blogs but I am getting very conflicting views. Some
people say
> > > > this kind of module loading is not supported
> > > >
(http://www.nabble.com/Problems-using-Flex-modules-td15188446.html)
> > > > but the Adobe Flash Player 9 Security white paper clearly
> indicate it
> > > > is possible:
> > > >
> > > > "A SWF file may also call Security.allowDomain() with the wildcard
> > > > parameter "*" to allow any domain.
> > > > This is necessary to allow a local-with-networking SWF file to
> > > > cross-script a network SWF file."
> > > >
> > > > Anyway, off to the example project I created. Here are two very
> basic
> > > > mxmls.
> > > >
> > > > TestApplication.mxml -- (loaded via file system, this attempts
> to load
> > > > a simple module hosted at localhost)
> > > > <?xml version="1.0" encoding="utf-8"?>
> > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > > > layout="vertical" initialize="init()">
> > > > <mx:Script>
> > > > <![CDATA[
> > > > import mx.events.ModuleEvent;
> > > > private function init() : void
> > > > {
> > > > Security.allowDomain("localhost");
> > > >
> > > > Security.loadPolicyFile("http://localhost/crossdomain.xml";);
> > > >
> > > > var loader:URLLoader = new URLLoader();
> > > > loader.addEventListener(Event.COMPLETE, function(event
> > > > : Event) {
> > > > trace("Finished loading crossdomain.");
> > > > trace(loader.data);
> > > > });
> > > > loader.load(new
> > > > URLRequest("http://localhost/crossdomain.xml";));
> > > > }
> > > >
> > > > private function erroredOut(event : ModuleEvent) : void
> > > > {
> > > > trace(event.errorText);
> > > > }
> > > >
> > > > private function loadIt() : void
> > > > {
> > > > loaderOfModules.url = "http://localhost/SimpleModule.swf";;
> > > > }
> > > > ]]>
> > > > </mx:Script>
> > > >
> > > > <mx:Button click="loadIt()" label="Load module from localhost" />
> > > >
> > > > <!-- Sandbox type reads local-trusted -->
> > > > <mx:Text text="{Security.sandboxType}" />
> > > > <mx:ModuleLoader id="loaderOfModules" width="100%" height="500"
> > > > error="erroredOut(event)"
> > > > applicationDomain="{ApplicationDomain.currentDomain}"/>
> > > > </mx:Application>
> > > >
> > > > SimpleModule.mxml (the module hosted at localhost)
> > > > <?xml version="1.0" encoding="utf-8"?>
> > > > <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml";
> > > > initialize="Security.allowDomain('*')" >
> > > > <mx:Text text="Hi there" />
> > > > </mx:Module>
> > > >
> > > > And the crossdomain.xml file hosted at localhost. (Although
> according
> > > > to some Adobe docs, this file is not even needed to do
> crossscripting,
> > > > only for loading data.)
> > > > <?xml version="1.0"?>
> > > > <cross-domain-policy>
> > > > <allow-access-from domain="*" />
> > > > </cross-domain-policy>
> > > >
> > > > Note that I can get this example to work fine if I host the
> > > > Application SWF from one network domain and load the module from
> > > > another network domain without changing a thing. I only get the
> error
> > > > when the loading SWF is hosted on the filesystem. Also note
that the
> > > > Application.swf is in a folder designated as locally trusted and I
> > > > confirm this by looking at the Security.sandboxType variable at
> > runtime.
> > > >
> > > > I am using Flex 3 and running this with Flash Player 9 debugger
> > version.
> > > >
> > > > So my questions are:
> > > >
> > > > * Is this scenario even supported? If not, what's with the
> > > > documentation I quoted from Adobe above? If yes, what am I
missing?
> > > > * And do crossdomain.xml files even used when doing
crossscripting?
> > > > Or are they just often conflated with module loading because you
> often
> > > > load modules and data from the same server?
> > > >
> > >
> >
>


Reply via email to