Различные обработчики файлов cookie для двух экземпляров Chromium в одной форме

Я использую DCEF3 на Delphi XE3.

Задача: Создать разные хранилища cookie для разных экземпляров TChromium.
Проблема: я создаю разные экземпляры ICefCookieManager для каждого экземпляра TChromium и возвращаю его в событии GetCookieManager.

Пример кода:

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Chromium1: TChromium;
    Chromium2: TChromium;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Chromium1GetCookieManager(Sender: TObject;
      const browser: ICefBrowser; const mainUrl: ustring;
      out Result: ICefCookieManager);
    procedure Chromium2GetCookieManager(Sender: TObject;
      const browser: ICefBrowser; const mainUrl: ustring;
      out Result: ICefCookieManager);
  private
    { Private declarations }
      CookieManager: ICefCookieManager;
      CookieManager2: ICefCookieManager;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

procedure TForm1.FormCreate(Sender: TObject);
begin
    CookieManager:=TCefCookieManagerRef.New('C:\Cookies\1');
    CookieManager2:=TCefCookieManagerRef.New('C:\Cookies\2');
end;

procedure TForm1.Chromium1GetCookieManager(Sender: TObject;
  const browser: ICefBrowser; const mainUrl: ustring;
  out Result: ICefCookieManager);
begin
    Result:=CookieManager;
end;

procedure TForm1.Chromium2GetCookieManager(Sender: TObject;
  const browser: ICefBrowser; const mainUrl: ustring;
  out Result: ICefCookieManager);
begin
    Result:=CookieManager2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    Chromium1.Load('http://somesite.com');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Chromium2.Load('http://somesite.com');
end;

Если я добавлю ShowMessage('First') в Chromium1GetCookieManager событие и ShowMessage('Second') в Chromium2GetCookieManagerвсегда будет отображаться сообщение "Первый", независимо от того, нажимаю ли я кнопку 1 или кнопку 2.
Другими словами, Chromium1GetCookieManager вызывается для обоих экземпляров.

1 ответ

Проблема решена, спасибо всем.

Как решить проблему?
Просто отключите переменную cefsingleprocess в вашем project1.dpr.
Пример:

program Project1;

uses
  Forms,
  cefvcl,
  ceflib,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  CefSingleProcess := False;//this what i'm talking about
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Другие вопросы по тегам