Можно ли удалить или аннулировать сеанс gecko / firefox, не закрывая браузер? - PullRequest
2 голосов
/ 22 февраля 2010

Возможно ли с помощью интерфейсов gecko / firefox XPCOM удалить или аннулировать активный сеанс пользователя без закрытия браузера? Я использую встроенный Gecko (в частности, GeckoFX ) в приложении, где существует вероятность того, что несколько пользователей могут использовать компонент браузера в течение всего срока службы приложения.

Приложение упаковывает веб-браузер с различными другими функциями, и когда веб-браузер «закрыт», приложение остается открытым. Кажется, что с точки зрения движка геккона, поскольку процесс еще не закрыт, активный сеанс все еще активен. Если пользователь должен войти в Gmail или Facebook, например, а затем закрыть браузер, после повторного открытия браузера и возврата на одну из этих страниц, этот пользователь будет по-прежнему входить в систему. Поскольку несколько пользователей могут использовать приложение без фактического выхода из приложения возникают проблемы с конфиденциальностью.

Я пытался вызвать NS_InitXPCOM2 и NS_ShutdownXPCOM в методе constructor / dispose элемента управления браузера, однако NS_InitXPCOM2 не может быть вызван после NS_ShutdownXPCOM в течение времени жизни процесса, так что это просто аварии.

Я также использовал метод PurgeHistory из nsISHistory и метод evictEntries из nsICacheService - ни один из них, по-видимому, не оказывает немедленного эффекта в течение жизни процесса.

Кто-нибудь знает какие-либо интерфейсы XPCOM, которые могут достичь этого? В качестве альтернативы, любые указатели в направлении аналогичной функциональности, будь то через интерфейсы XPCOM или расширения Firefox, будут высоко оценены (существуют ли какие-либо расширения, которые позволяют вам очистить текущий сеанс просмотра без повторного открытия браузера? Или которые предоставляют разные сессии между каждым Firefox окно / вкладка?)

Программа написана на C #, однако ответы на любом языке приветствуются.

Большое спасибо

1 Ответ

4 голосов
/ 22 февраля 2010

Я наконец нашел интерфейс, который, кажется, позволяет это: nsICookieManager removeAll()

Соответствующие C / интерфейсы / код для тех, кто использует GeckoFX:

[Guid("AAAB6710-0F2C-11d5-A53B-0010A401EB10"),
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICookieManager
{
    void removeAll();
    void remove(string aDomain, string aName, string aPath, bool aBlocked);
}

и Xpcom.GetService<nsICookieManager>("@mozilla.org/cookiemanager;1").removeAll(); в соответствующем месте.

...