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