creating a custom browser plugin image

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

creating a custom browser plugin image

Hilaire Fernandes-4
I try to use a 3.9 image for the browser plugin image.
I have checked about readDocumentAtStartup preference and "AutoStart
installedLaunchers".

The image appears in the browser ok.

If add a src="test.st" in the html as:

<head>
<title>Test de plugin web Squeak</title>
</head>
<body>
<embed
        type="application/x-squeak-source"
        src ="test.st"
        align="center"
        width="700"
        height="500">
</embed>
</body>
</html>

With test.st as:
IFIDbSession default. IFIModels new.
moment := IFIModels schools anyOne learners anyOne pedagogicalMoments
anyOne.
view := (moment exerciceViewAtStart beSticky position: 0@0) openInWorld.

I got a strange error, see attached log and the test.st is not filed in.

If I use this same image and drop the test.st into it, it works fine.
So it may look like a security check, but I cannot find it.

Thanks

Hilaire

MessageNotUnderstood: UndefinedObject>>domain
15 July 2007 12:30:33 pm

VM: unix - a SmalltalkImage
Image: Squeak3.9 [latest update: #7068]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/hilaire/.npsqueak
Trusted Dir /home/hilaire/.npsqueak/secure
Untrusted Dir /home/hilaire/.npsqueak/My Squeak

UndefinedObject(Object)>>doesNotUnderstand: #domain
        Receiver: nil
        Arguments and temporary variables:
                t1: domain
        Receiver's instance variables:
nil

UndefinedObject>>DoIt
        Receiver: nil
        Arguments and temporary variables:

        Receiver's instance variables:
nil

Compiler>>evaluate:in:to:notifying:ifFail:logged:
        Receiver: a Compiler
        Arguments and temporary variables:
                t1: 'Non .ST domain'
                t2: nil
                t3: nil
                t4: nil
                t5: [] in Compiler class>>evaluate:for:notifying:logged: {[^ nil]}
                t6: true
                t7: DoIt
        Non.
        ^ ST domain
                t8: a CompiledMethod (534)
                t9: nil
                t10: nil
                t11: nil
                t12: nil
        Receiver's instance variables:
                sourceStream: a ReadStream 'Non .ST domain'
                requestor: nil
                class: UndefinedObject
                category: nil
                context: nil
                parserClass: Parser

Compiler class>>evaluate:for:notifying:logged:
        Receiver: Compiler
        Arguments and temporary variables:
                t1: 'Non .ST domain'
                t2: nil
                t3: nil
                t4: true
        Receiver's instance variables:
                superclass: Object
                methodDict: a MethodDictionary(#compile:in:classified:notifying:ifFail:->a Comp...etc...
                format: 142
                instanceVariables: #('sourceStream' 'requestor' 'class' 'category' 'context' 'p...etc...
                organization: ('error handling' notify: notify:at:)
('public access' compile:in...etc...
                subclasses: nil
                name: #Compiler
                classPool: a Dictionary()
                sharedPools: nil
                environment: a SystemDictionary(lots of globals)
                category: #'Compiler-Kernel'
                traitComposition: nil
                localSelectors: nil


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #domain
UndefinedObject>>DoIt
Compiler>>evaluate:in:to:notifying:ifFail:logged:
Compiler class>>evaluate:for:notifying:logged:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Compiler class>>evaluate:for:logged:
Compiler class>>evaluate:logged:
[] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing: {[t2 := (self peekFor: $!)     ifTrue: [(Compiler evaluate: self nextChunk lo...]}
BlockContext>>on:do:
[] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing: {[:t4 |  [self atEnd]   whileFalse: [t4 value: self position.    self skipSep...]}
[] in ProgressInitiationException>>defaultMorphicAction {[t1 := workBlock value: t2]}
BlockContext>>ensure:
ProgressInitiationException>>defaultMorphicAction
ProgressInitiationException>>defaultAction
UndefinedObject>>handleSignal:
ProgressInitiationException(Exception)>>signal
ProgressInitiationException>>display:at:from:to:during:
ProgressInitiationException class>>display:at:from:to:during:
ByteString(String)>>displayProgressAt:from:to:during:
RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing:
RWBinaryOrTextStream(PositionableStream)>>fileIn
CodeLoader>>installSourceFile:
[] in CodeLoader>>installSourceFiles {[:t1 | self installSourceFile: t1 contentStream]}
Array(SequenceableCollection)>>do:
CodeLoader>>installSourceFiles
ProjectLauncher>>startUpAfterLogin
ProjectLauncher>>startUp
[] in AutoStart class>>startUp: {[t4 startUp]}
WorldState>>runStepMethodsIn:
PasteUpMorph>>runStepMethods
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess {[[World doOneCycle.  Processor yield.  false] whileFalse.  nil]}
[] in BlockContext>>newProcess {[self value.  Processor terminateActive]}


Reply | Threaded
Open this post in threaded view
|

Re: creating a custom browser plugin image

Bert Freudenberg
Looks like the image tried to access 'http://test.st/'.

The most compatible solution is to add a BASE tag with the absolute  
URL ending in a slash, which is concatenated with the SRC url (see  
ProjectLauncher>>startUpAfterLogin and  
CodeLoader>>createRequestFor:in:).

You can try to add APISUPPORTED="TRUE" which will cause the image to  
try fetching the (relative) SRC through the browser. That may or may  
not work depending on which browser is used.

The problem is that a browser plugin cannot find out the base URL of  
the page it is embedded in, so it cannot resolve relative URLs on its  
own. The only way to fetch relative URLs is by going through the  
browser API. Which was unreliable for years, hence at squeakland the  
APISUPPORTED tag was generated on the server side by a script that  
used the Browser agent string to determine if the API is supported or  
not.

- Bert -

On Jul 15, 2007, at 12:37 , Hilaire Fernandes wrote:

> I try to use a 3.9 image for the browser plugin image.
> I have checked about readDocumentAtStartup preference and  
> "AutoStart installedLaunchers".
>
> The image appears in the browser ok.
>
> If add a src="test.st" in the html as:
>
> <head>
> <title>Test de plugin web Squeak</title>
> </head>
> <body>
> <embed
> type="application/x-squeak-source"
> src ="test.st"
> align="center"
> width="700"
> height="500">
> </embed>
> </body>
> </html>
>
> With test.st as:
> IFIDbSession default. IFIModels new.
> moment := IFIModels schools anyOne learners anyOne  
> pedagogicalMoments anyOne.
> view := (moment exerciceViewAtStart beSticky position: 0@0)  
> openInWorld.
>
> I got a strange error, see attached log and the test.st is not  
> filed in.
>
> If I use this same image and drop the test.st into it, it works fine.
> So it may look like a security check, but I cannot find it.
>
> Thanks
>
> Hilaire
> MessageNotUnderstood: UndefinedObject>>domain
> 15 July 2007 12:30:33 pm
>
> VM: unix - a SmalltalkImage
> Image: Squeak3.9 [latest update: #7068]
>
> SecurityManager state:
> Restricted: false
> FileAccess: true
> SocketAccess: true
> Working Dir /home/hilaire/.npsqueak
> Trusted Dir /home/hilaire/.npsqueak/secure
> Untrusted Dir /home/hilaire/.npsqueak/My Squeak
>
> UndefinedObject(Object)>>doesNotUnderstand: #domain
> Receiver: nil
> Arguments and temporary variables:
> t1: domain
> Receiver's instance variables:
> nil
>
> UndefinedObject>>DoIt
> Receiver: nil
> Arguments and temporary variables:
>
> Receiver's instance variables:
> nil
>
> Compiler>>evaluate:in:to:notifying:ifFail:logged:
> Receiver: a Compiler
> Arguments and temporary variables:
> t1: 'Non .ST domain'
> t2: nil
> t3: nil
> t4: nil
> t5: [] in Compiler class>>evaluate:for:notifying:logged: {[^ nil]}
> t6: true
> t7: DoIt
> Non.
> ^ ST domain
> t8: a CompiledMethod (534)
> t9: nil
> t10: nil
> t11: nil
> t12: nil
> Receiver's instance variables:
> sourceStream: a ReadStream 'Non .ST domain'
> requestor: nil
> class: UndefinedObject
> category: nil
> context: nil
> parserClass: Parser
>
> Compiler class>>evaluate:for:notifying:logged:
> Receiver: Compiler
> Arguments and temporary variables:
> t1: 'Non .ST domain'
> t2: nil
> t3: nil
> t4: true
> Receiver's instance variables:
> superclass: Object
> methodDict: a MethodDictionary
> (#compile:in:classified:notifying:ifFail:->a Comp...etc...
> format: 142
> instanceVariables: #('sourceStream' 'requestor' 'class'  
> 'category' 'context' 'p...etc...
> organization: ('error handling' notify: notify:at:)
> ('public access' compile:in...etc...
> subclasses: nil
> name: #Compiler
> classPool: a Dictionary()
> sharedPools: nil
> environment: a SystemDictionary(lots of globals)
> category: #'Compiler-Kernel'
> traitComposition: nil
> localSelectors: nil
>
>
> --- The full stack ---
> UndefinedObject(Object)>>doesNotUnderstand: #domain
> UndefinedObject>>DoIt
> Compiler>>evaluate:in:to:notifying:ifFail:logged:
> Compiler class>>evaluate:for:notifying:logged:
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> Compiler class>>evaluate:for:logged:
> Compiler class>>evaluate:logged:
> [] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing:  
> {[t2 := (self peekFor: $!)     ifTrue: [(Compiler evaluate: self  
> nextChunk lo...]}
> BlockContext>>on:do:
> [] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing:  
> {[:t4 |  [self atEnd]   whileFalse: [t4 value: self position.    
> self skipSep...]}
> [] in ProgressInitiationException>>defaultMorphicAction {[t1 :=  
> workBlock value: t2]}
> BlockContext>>ensure:
> ProgressInitiationException>>defaultMorphicAction
> ProgressInitiationException>>defaultAction
> UndefinedObject>>handleSignal:
> ProgressInitiationException(Exception)>>signal
> ProgressInitiationException>>display:at:from:to:during:
> ProgressInitiationException class>>display:at:from:to:during:
> ByteString(String)>>displayProgressAt:from:to:during:
> RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing:
> RWBinaryOrTextStream(PositionableStream)>>fileIn
> CodeLoader>>installSourceFile:
> [] in CodeLoader>>installSourceFiles {[:t1 | self  
> installSourceFile: t1 contentStream]}
> Array(SequenceableCollection)>>do:
> CodeLoader>>installSourceFiles
> ProjectLauncher>>startUpAfterLogin
> ProjectLauncher>>startUp
> [] in AutoStart class>>startUp: {[t4 startUp]}
> WorldState>>runStepMethodsIn:
> PasteUpMorph>>runStepMethods
> WorldState>>doOneCycleNowFor:
> WorldState>>doOneCycleFor:
> PasteUpMorph>>doOneCycle
> [] in Project class>>spawnNewProcess {[[World doOneCycle.  
> Processor yield.  false] whileFalse.  nil]}
> [] in BlockContext>>newProcess {[self value.  Processor  
> terminateActive]}
>



Reply | Threaded
Open this post in threaded view
|

Re: creating a custom browser plugin image

Hilaire Fernandes-4
This is where I was stuck thanks.
I noted the font are a little tiny when switching to browser plugin
image. Which option alter this?

Hilaire


Bert Freudenberg a écrit :

> Looks like the image tried to access 'http://test.st/'.
>
> The most compatible solution is to add a BASE tag with the absolute URL
> ending in a slash, which is concatenated with the SRC url (see
> ProjectLauncher>>startUpAfterLogin and CodeLoader>>createRequestFor:in:).
>
> You can try to add APISUPPORTED="TRUE" which will cause the image to try
> fetching the (relative) SRC through the browser. That may or may not
> work depending on which browser is used.
>
> The problem is that a browser plugin cannot find out the base URL of the
> page it is embedded in, so it cannot resolve relative URLs on its own.
> The only way to fetch relative URLs is by going through the browser API.
> Which was unreliable for years, hence at squeakland the APISUPPORTED tag
> was generated on the server side by a script that used the Browser agent
> string to determine if the API is supported or not.


Reply | Threaded
Open this post in threaded view
|

Re: creating a custom browser plugin image

Hilaire Fernandes-4
Hilaire Fernandes a écrit :
> This is where I was stuck thanks.
> I noted the font are a little tiny when switching to browser plugin
> image. Which option alter this?

Sorry to bother this problem has nothing to do with plugin.

Hilaire