diff --git a/components/geckoport/Components/GeckoBrowser.lrs b/components/geckoport/Components/GeckoBrowser.lrs index 9adbb281f..5d5eedae2 100755 --- a/components/geckoport/Components/GeckoBrowser.lrs +++ b/components/geckoport/Components/GeckoBrowser.lrs @@ -63,3 +63,73 @@ LazarusResources.Add('TGeckoBrowser','BMP',[ +#128#128#0#128#128#0#128#128#0#128#128#0#128#128#0#128#128#0#128#0#0#128#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#0#0#0#0#0#0 ]); +LazarusResources.Add('TGeckoPrompt','BMP',[ + 'BMv'#6#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#8#0#0#0#0#0#0#0#0 + +#0#196#14#0#0#196#14#0#0#0#1#0#0#0#1#0#0'@@@'#255'{bP'#255'}bR'#255'|dR'#255 + +#127'gY'#255'~nb'#255#206'J.'#255#219'G)'#255#220'I,'#255#213'U:'#255#221'\=' + +#255#226'R3'#255#226'S5'#255#234'V3'#255#228'Y;'#255#243'^9'#255#131'kZ'#255 + +#133'n^'#255#156'n_'#255#142'q['#255#145't_'#255#160'm_'#255#133'tf'#255#138 + +'ve'#255#143'ud'#255#140'wf'#255#141'vh'#255#142'xj'#255#147'{j'#255#146'~o' + +#255#150#127'o'#255#141#127'{'#255#145#127's'#255#168'wi'#255#229'fE'#255#237 + +'aA'#255#237'cC'#255#245'fB'#255#246'hE'#255#254'iA'#255#252'mG'#255#252'pJ' + +#255#254'qI'#255#253'tN'#255#234'sQ'#255#236'tR'#255#235'{['#255#236'zY'#255 + +#254'xR'#255#254'|X'#255#143#129'u'#255#144#129'u'#255#145#129'u'#255#146#130 + +'v'#255#152#130'u'#255#153#133'v'#255#154#133'w'#255#147#132'x'#255#148#132 + +'y'#255#149#133'z'#255#148#134'z'#255#149#134'z'#255#150#135'{'#255#149#135 + +'|'#255#153#134'{'#255#151#136'}'#255#153#136'y'#255#155#139'~'#255#156#139 + +#127#255#157#139'~'#255#180#135'{'#255#254#128'\'#255#236#129'b'#255#236#136 + +'j'#255#254#136'f'#255#236#142's'#255#254#143'p'#255#255#143'p'#255#236#149 + +'|'#255#254#150'z'#255'~v'#138#255'kr'#181#255'hp'#186#255#131'y'#139#255#129 + +'y'#140#255#220#0#255#255'q'#178#218#255#128#128#128#255#134#134#134#255#135 + +#134#134#255#133#128#140#255#153#139#129#255#157#140#128#255#158#142#130#255 + +#156#144#129#255#157#144#134#255#149#148#147#255#148#148#148#255#149#149#149 + +#255#160#145#133#255#161#146#134#255#162#146#135#255#163#147#136#255#165#145 + +#136#255#164#148#137#255#165#150#138#255#166#150#139#255#161#148#140#255#162 + +#149#140#255#168#151#138#255#167#153#142#255#171#152#139#255#169#153#142#255 + +#181#149#135#255#189#157#143#255#162#146#145#255#162#151#147#255#173#160#149 + +#255#177#165#156#255#136#139#180#255#185#169#160#255#186#175#174#255#236#156 + +#132#255#254#158#132#255#255#159#133#255#196#166#154#255#236#163#141#255#254 + +#166#141#255#236#170#150#255#254#173#151#255#254#174#152#255#255#175#153#255 + +#236#177#159#255#210#179#168#255#208#180#170#255#236#182#167#255#232#187#173 + +#255#254#182#162#255#255#183#163#255#255#189#170#255#254#190#172#255#255#190 + +#173#255#225#185#176#255#254#195#179#255#254#197#182#255#254#198#183#255#244 + +#203#191#255#254#205#191#255#239#225#189#255#167#187#206#255#170#191#208#255 + +#176#197#208#255#201#200#199#255#201#193#203#255#198#200#200#255#199#200#201 + +#255#200#201#202#255#204#203#203#255#206#204#203#255#205#203#204#255#204#204 + +#205#255#207#205#204#255#213#197#194#255#218#198#195#255#208#207#207#255#220 + +#202#206#255#214#201#208#255#212#202#210#255#212#203#212#255#213#205#215#255 + +#213#207#217#255#211#210#209#255#212#212#211#255#218#216#215#255#212#208#219 + +#255#212#210#221#255#214#212#223#255#236#202#192#255#226#204#204#255#233#207 + +#203#255#237#206#200#255#242#204#194#255#238#208#201#255#239#208#200#255#253 + +#208#196#255#237#224#194#255#237#227#205#255#246#233#200#255#225#224#223#255 + +#218#216#224#255#225#221#227#255#228#228#228#255#229#229#229#255#231#231#231 + +#255#233#226#228#255#239#230#229#255#231#232#231#255#237#235#231#255#232#231 + +#232#255#233#232#232#255#235#234#234#255#236#235#235#255#238#237#235#255#238 + +#237#237#255#238#238#238#255#239#239#239#255#243#233#231#255#244#234#230#255 + +#240#240#239#255#240#240#240#255#242#241#241#255#253#253#253#255#255#255#255 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'U'#0'UU'#0'U'#0'U' + +#0'UU'#0'UUU'#0'U'#0'UUU'#0'UUU'#0#0'U'#0#0'U'#0'U'#0'U'#0'U'#0'U'#0'U'#0#0 + +'UU'#0'UUU'#0'U'#0#0'U'#0#0'U'#0'U'#0#0'U'#0#0'U'#0'U'#0'U'#0'UUU'#0#0'U'#0#0 + +'UU'#0'UU'#0'UUU'#0'U'#0#0'U'#0#0#0'UUUUUUUUUUUUUUUUUUUUUUUUU'#22':5549>:454' + +'33<==5244444'#5'j'#209#209#209#209#209#209#209#209#209'YWWWY'#185#186'XWWWX' + +#193'5i'#209#209#209#209#209#209#209#209#209'W'#212#212#212'W'#187#148'W'#212 + +#212#212'W'#191'9h'#209#209#209#209#209#209#209#209#209'bWWW`'#197#202'aWWWa' + +#204':f'#209#209#209#209#209#209#209#209#209#209#209#209#209#209#209#209#209 + +#209#209#209#209#209':e'#209'YWWWWWWWWWWWWWWWWWWY'#209';d'#157'W'#212#212#212 + +#212#212#212#212#212#212#212#212#212#212#212#212#212#212#212'W'#209'=e'#205 + +'bWWWWWWWWWWWWWWWWWWb'#208'>f'#159#158#155#152#200#209#209#210's'#199#172#156 + +#171#154#161#160#164#188#211#192#196#201'An'#209'YWWWWWWWWWWWWWWWWWWY'#203'[' + +'u'#173'W'#212#212#212#212#212#212#212#212#212#212#212#212#212#212#212#212 + +#212#212'W'#209'_v'#198'aWWWWWWWWWWWWWWWWWWb'#209'kx'#207#207#206#195#194#190 + +#189#176#175#174#170#169#168#167#166#165#178#179#182#183#180#180'g'#134#147 + +#181#177#163#143#139#137#129#127'{OLJG0*''('#15#13#14#8'F}'#184#162#150#149 + ,#145#141#138#131#127'|OMJG011)&#'#11#7'!r'#146#151'V'#153#144#140#137#130#127 + +'{OMJG0G+)%$'#12#7#21'q'#136#133'y'#142#135#132#128'~zNKIH/-.-,"'#10#9#6#18 + +'E^D\oDB'#27#26#16#1#2#3#3#4#24#19#20#30'6STP'#31'?]cpfmC@ '#29#23#17#17#25 + +'87'#28#28'ltQwRZ' +]); diff --git a/components/geckoport/Components/GeckoBrowser.pas b/components/geckoport/Components/GeckoBrowser.pas index 7d7b40f88..15daf622a 100755 --- a/components/geckoport/Components/GeckoBrowser.pas +++ b/components/geckoport/Components/GeckoBrowser.pas @@ -56,7 +56,7 @@ uses LclIntf, LMessages, LclType, LResources, Graphics, SysUtils, Classes, Controls, nsXPCOM, nsGeckoStrings, nsTypes, CallbackInterfaces, nsXPCOMGlue, BrowserSupports, - nsXPCOM_std19 + nsXPCOM_std19, GeckoPromptService {$IFDEF LCLCarbon}, CarbonPrivate {$ENDIF} {$IFDEF LCLCocoa}, CocoaPrivate, CocoaAll, CocoaUtils {$ENDIF} {$IFDEF LCLGtk2}, gtk2, @@ -191,6 +191,9 @@ type FGeckoComponentsStartupSucceeded: boolean; + //Linked event components + FPromptService: TGeckoPrompt; + //misc settings FDisableJavaScript: Boolean; FInitializationStarted: Boolean; @@ -327,6 +330,10 @@ type property DisableJavaScript: Boolean read GetDisableJavaScript write SetDisableJavascript; property Initialized: Boolean read FInitialized; + + // Linked components set + property Prompt: TGeckoPrompt + read FPromptService write FPromptService; end; TCustomGeckoBrowserChrome = class(TInterfacedObject, @@ -438,11 +445,14 @@ type function GetURIString: UTF8String; public constructor Create(AOwner: TComponent); override; + destructor Destroy; override; property Title: WideString read FTitle; property URIString: UTF8String read GetURIString; + class function GetGeckoBrowserWithDOMWindow(constref DOMWindow: nsIDOMWindow): TGeckoBrowser; + published property OnDOMLoad: TGeckoBrowserDOMEventHandler read FOnDOMLoad write FOnDOMLoad; @@ -514,7 +524,7 @@ type property OnDirectoryService; property DisableJavaScript; - + property Prompt; public property ContentDocument; property ContentWindow; @@ -523,6 +533,8 @@ type end; + { TGeckoBrowserChrome } + TGeckoBrowserChrome = class(TCustomGeckoBrowserChrome, nsIInterfaceRequestor_std19, nsIContextMenuListener2, @@ -724,6 +736,9 @@ uses nsError, nsStream, nsMemory, nsNetUtil, GeckoInit, Forms, TypInfo, Variants; +var + GeckoListBrowsers: TFPList=nil; + procedure Register; begin RegisterComponents('Gecko', [TGeckoBrowser]); @@ -1310,6 +1325,8 @@ begin try GeckoComponentsStartup; FGeckoComponentsStartupSucceeded := true; + //Create the prompt service and register + RegisterPromptService; except FGeckoComponentsStartupSucceeded := false; end; @@ -1403,7 +1420,7 @@ begin FBrowser.OnStatusChange(FBrowser, status); end; -function TGeckoBrowserChrome.GetWebBrowser +function TGeckoBrowserChrome.GetWebBrowser() : nsIWebBrowser; begin Result := FBrowser.FWebBrowser; @@ -1415,7 +1432,7 @@ begin FBrowser.FWebBrowser := aWebBrowser; end; -function TGeckoBrowserChrome.GetChromeFlags +function TGeckoBrowserChrome.GetChromeFlags() : PRUint32; begin //TODO 2 -cTGeckoBrowserChrome: Chrome フラグの扱いをどうしようか @@ -1428,7 +1445,7 @@ begin UseParameter(aChromeFlags); end; -procedure TGeckoBrowserChrome.DestroyBrowserWindow; +procedure TGeckoBrowserChrome.DestroyBrowserWindow(); begin if Assigned(FBrowser.FOnCloseWindow) then FBrowser.FOnCloseWindow(FBrowser); @@ -1442,11 +1459,11 @@ begin FBrowser.Height:= aCY; end; -procedure TGeckoBrowserChrome.ShowAsModal; +procedure TGeckoBrowserChrome.ShowAsModal(); begin end; -function TGeckoBrowserChrome.IsWindowModal +function TGeckoBrowserChrome.IsWindowModal() : PRBool; begin Result := False; @@ -1533,7 +1550,7 @@ begin end; end; -procedure TGeckoBrowserChrome.SetFocus; +procedure TGeckoBrowserChrome.SetFocus(); begin if Assigned(FBrowser.FOnVisibleChange) then begin //Give the browser a chance to become visible @@ -1546,7 +1563,7 @@ begin end; end; -function TGeckoBrowserChrome.GetVisibility: PRBool; +function TGeckoBrowserChrome.GetVisibility(): PRBool; begin // TODO 1 -cTGeckoBrowserChrome: TGeckoBrowserChrome.GetVisibility はどうすべきか Result := True; @@ -1559,7 +1576,7 @@ begin //TODO 1 -cTGeckoBrowserChrome: TGeckoBrowserChrome.SetVisibility の実装 end; -function TGeckoBrowserChrome.GetTitle: PWideChar; +function TGeckoBrowserChrome.GetTitle(): PWideChar; var pstr: PWideChar; title: WideString; @@ -1581,7 +1598,7 @@ begin FBrowser.OnTitleChange(FBrowser, FBrowser.FTitle); end; -function TGeckoBrowserChrome.GetSiteWindow: Pointer; +function TGeckoBrowserChrome.GetSiteWindow(): Pointer; begin {$PUSH} {$HINTS OFF} @@ -1779,6 +1796,8 @@ end; constructor TGeckoBrowser.Create(AOwner: TComponent); begin + if not Assigned(GeckoListBrowsers) then GeckoListBrowsers:=TFPList.Create; + GeckoListBrowsers.Add(Self); inherited; Chrome := TGeckoBrowserChrome.Create(Self); Listener := TGeckoBrowserListener.Create(Self); @@ -1794,6 +1813,34 @@ begin {$ENDIF} end; +destructor TGeckoBrowser.Destroy; +begin + inherited Destroy; + GeckoListBrowsers.Remove(Self); + if GeckoListBrowsers.Count=0 then FreeAndNil(GeckoListBrowsers); +end; + +class function TGeckoBrowser.GetGeckoBrowserWithDOMWindow( + constref DOMWindow: nsIDOMWindow): TGeckoBrowser; +var + ThisGecko: TGeckoBrowser; + t1,t2: nsIDOMWindow; + j: integer; +begin + Result:=nil; + if Assigned(GeckoListBrowsers) then begin + for j := 0 to GeckoListBrowsers.Count-1 do begin + ThisGecko:=TGeckoBrowser(GeckoListBrowsers[j]); + t1:=ThisGecko.GetContentWindow.Parent; + t2:=DOMWindow.Parent; + if t1=t2 then begin + Result:=ThisGecko; + break; + end; + end; + end; +end; + function TGeckoBrowserChrome.NS_GetInterface(constref uuid: TGUID; out _result): nsresult; begin if IsEqualGUID(uuid, nsIDOMWindow) then diff --git a/components/geckoport/Components/GeckoComponents.lpk b/components/geckoport/Components/GeckoComponents.lpk index 2748b3339..6accd52d2 100755 --- a/components/geckoport/Components/GeckoComponents.lpk +++ b/components/geckoport/Components/GeckoComponents.lpk @@ -5,9 +5,9 @@ - + - + @@ -42,7 +42,7 @@ - + @@ -124,6 +124,11 @@ + + + + + diff --git a/components/geckoport/Components/GeckoComponents.pas b/components/geckoport/Components/GeckoComponents.pas index ef4c0bbec..07fbe61dc 100755 --- a/components/geckoport/Components/GeckoComponents.pas +++ b/components/geckoport/Components/GeckoComponents.pas @@ -1,4 +1,4 @@ -{ This file was automatically created by Lazarus. do not edit! +{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } @@ -7,16 +7,17 @@ unit GeckoComponents; interface uses - GeckoBrowser, GeckoChromeWindow, GeckoInit, nsCID, - nsConsts, nsEnumerators, nsError, nsErrorUtils, nsGeckoStrings, nsInit, - nsMemory, nsNetUtil, nsStream, nsTypes, nsXPCOM, nsXPCOMGlue, nsXRE, - nsXPCOM_std19, LazarusPackageIntf; + GeckoBrowser, GeckoChromeWindow, GeckoInit, nsCID, nsConsts, + nsEnumerators, nsError, nsErrorUtils, nsGeckoStrings, nsInit, nsMemory, + nsNetUtil, nsStream, nsTypes, nsXPCOM, nsXPCOMGlue, nsXRE, nsXPCOM_std19, + GeckoPromptService, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GeckoBrowser', @GeckoBrowser.Register); + RegisterUnit('GeckoPromptService', @GeckoPromptService.Register); end; initialization