Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№2606-09-2012 00:52:11

Kaban
Участник
 
Группа: Members
Зарегистрирован: 27-07-2006
Сообщений: 136
UA: Seamonkey 2.12

Re: [CB]Cookies Permissions

Infocatcher

При удалении DOM-узла из дерева сработает XBL-деструктор, а при добавлении – конструктор. В общем, это все особенности реализации.
А первоначальную инициализацию никто не отменял.

Извиняюсь, возможно я сейчас скажу глупость (в программировании под XUL я не в зуб ногой). А нельзя ли сделать статическую переменную-счётчик и вызывать инициализацию только один раз (самый самый первый)? Типа синглтона?

Протестировал сейчас кнопочку в статус-баре. Чтобы смотрелось хорошо, нужно стереть название кнопки (в CB-редакторе), иначе рядом с иконкой будет очень много букв. Выглядит и работает почти замечательно.

Два момента:

1. Когда наводишь на иконку, она "подсвечивается" прямоугольником, как пункт меню. Вероятно иконка добавляется как класс "панель" или что-то в этом роде.

2. Иконка в статус-бар добавляется с помощью appendChild(). Тут-то и порылась собака! Дело в том, что в статус-баре (это моя догадка, но вполне очевидно) присутствует прогресс-бар - ползущая шкала, которая появляется при загрузке страницы. В нормальном состоянии этот прогресс-бар либо невидим, либо имеет минимальные размеры. Иконка Cookie Permissions располагается после прогресс-бара (на экране - максимально влево).

В итоге, при загрузке новой страницы появляется прогресс-бар и иконка Cookie Permissions начинает сильно прыгать влево-вправо.

Решением я вижу использовать не addChild, а какой нибудь insertChildByIndex. Если по индексу вставлять дочерние элементы невозможно (нет такой функции), нужно сделать enumeration и загрузить в массив все чайлды из статус-бара, по-ходу дела удаляя их из статус-бара. Потом добавить все элементы обратно по addChild и в нужном месте втавить иконку Cookie Permissions. Причём уже можно по желанию засунуть Cookie Permissions на первое, второе, энное место.

Что скажете, возможно такое запрограммировать под XUL?

Отсутствует

 

№2706-09-2012 10:18:15

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 15.0

Re: [CB]Cookies Permissions

Kaban пишет

Извиняюсь, возможно я сейчас скажу глупость (в программировании под XUL я не в зуб ногой). А нельзя ли сделать статическую переменную-счётчик и вызывать инициализацию только один раз (самый самый первый)? Типа синглтона?

Если что-то и править, то в Custom Buttons.
А у меня вызывают onDestroy(), и я не могу в общем случае гарантировать, будет ли после этого вызвана инициализация.
Еще в некоторых случаях XBL-деструктор может удалить добавленные дочерние узлы (в частности, контекстное меню). То есть всякие добавленные обработчики останутся, а состояние самой кнопки сбросится.
И не особо хочется привязываться к текущей реализации – сломается, если что-то все же будет доработано в Custom Buttons.

Kaban пишет

1. Когда наводишь на иконку, она "подсвечивается" прямоугольником, как пункт меню.

В общем случае от стилей для <toolbarbutton> никуда не деться.
Можно только переопределить стили (проще) или создать, например, <image> и спрятать кнопку (сложнее).

Kaban пишет

2. [...]
В итоге, при загрузке новой страницы появляется прогресс-бар и иконка Cookie Permissions начинает сильно прыгать влево-вправо.

Да, надо добавлять в другое место.

Add "moveToSeaMonkeyStatusBar" option

Добавлено 06-09-2012 10:37:39
Use pure CSS for button appearance with "moveToSeaMonkeyStatusBar" enabled

Отредактировано Infocatcher (06-09-2012 10:37:39)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№2806-09-2012 13:05:41

Zhorik
Участник
 
Группа: Members
Зарегистрирован: 03-09-2012
Сообщений: 12
UA: Seamonkey 2.12

Re: [CB]Cookies Permissions

Infocatcher

Да, надо добавлять в другое место.

Add "moveToSeaMonkeyStatusBar" option

Добавлено Сегодня 10:37:39
Use pure CSS for button appearance with "moveToSeaMonkeyStatusBar" enabled

Когда можно будет протестировать новую версию? :)

Отсутствует

 

№2906-09-2012 13:49:44

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 15.0

Re: [CB]Cookies Permissions

Zhorik
Да когда угодно.
Или
View file @ [буквоцифры] -> Raw
из патча, или текущая версия:
/Custom_Buttons/blob/master/Cookies_Permissions/cookiesPermissions.js -> Raw

Добавлено 06-09-2012 13:50:28
Просто пока это не «новая версия», а «в процессе». :)

Отредактировано Infocatcher (06-09-2012 13:52:06)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3006-09-2012 19:28:34

Zhorik
Участник
 
Группа: Members
Зарегистрирован: 03-09-2012
Сообщений: 12
UA: Seamonkey 2.12

Re: [CB]Cookies Permissions

Infocatcher

Ураааа!!! Работает супер! Засунул иконку точно туда, куда мне надо! На почётное место слева от NoScript :)

Вот, может кому-то пригодятся классы некоторых элементов:
insertAfter: "linkification-status,yesscript-panel,noscript-statusIcon,download-monitor,popupIcon,statusbar-progresspanel"

Сначала лазил по исходникам расширений в поисках названий классов иконок. Потом открыл для себя DOM-инспектор! Там можно сразу элементарно найти название нужного класса. Для insertAfter нужно указывать название класса statusbarpanel для соответствующей иконки.

Считаю, что можно оформлять 0.2.0pre11 :)

P.S. Ещё бы настроечку, чтобы при наведении курсора на иконку он превращался в палец, как у NoScript и некоторых других расширений :)

Отсутствует

 

№3106-09-2012 22:21:36

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 15.0

Re: [CB]Cookies Permissions

А у меня Attributes Inspector есть :P


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3208-09-2012 00:30:20

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 15.0

Re: [CB]Cookies Permissions

Cookies Permissions 0.2.0pre11 (2012-09-08)
[x] Исправлена работа настройки "showDefaultPolicy" в Gecko < 13.
[+] Добавлена настройка "moveToStatusBar" для перемещения кнопки в строку состояния (SeaMonkey, Firefox <= 3.6).
[+] Добавлен запрос на подтверждение удаления cookies (настройка "confirmRemoval").
[x] Исправлено удаление незащищенных cookies по таймеру после закрытия первого окна с кнопкой в Firefox 3.6.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3305-12-2012 23:29:06

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 17.0

Re: [CB]Cookies Permissions

Cookies Permissions 0.2.0pre12 (2012-12-05)
[x] Некорректно обрабатывались открытые окна с настройками разрешений других типов.
[+] Добавлена настройка "reusePermissionsWindow", разрешающая использовать ранее открытое окно с настройками разрешений другого типа.
[*] Подкорректирована функция для закрытия окон нажатием на Escape.

Cookies Permissions 0.1.10.1 (2012-12-05)
[x] Исправлено удаление observer'а изменения разрешений.
[*] Подкорректирована функция для закрытия окон нажатием на Escape.

Отредактировано Infocatcher (05-12-2012 23:33:04)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3412-12-2012 20:23:48

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 17.0

Re: [CB]Cookies Permissions

Экспериментальное:
Add support for temporary permissions
И две настройки: showTempPermissions (aka вернуть все как было :)) и tempExpire, описание в самом скрипте.

Используется только API, так что добавленные за время действия разрешения cookies никуда сами по себе не исчезнут.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3503-03-2013 23:42:41

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Cookies Permissions 0.2.0 (2013-03-02)
[*] Все иконки объединены в одну картинку, для смены иконок используются CSS.
[x] Исправлено выставление фильтра при открытии списка cookies в Firefox 14.0a1.
[+] Добавлены настройки для использования базового домена (site.com вместо www.site.com или some.thing.site.com) при открытии списка cookies и диалога настройки разрешений.
[*] Унифицировано заполнение текстовых полей при открытии встроенных диалогов.
[+] Добавлена настройка "prefillMode", задающая способ выделения текста при открытии списка cookies и диалога настройки разрешений.
[+] В контекстное меню кнопки добавлен пункт "Удалить все cookies текущего сайта".
[x] Исправлено применение стилей кнопки (в SeaMonkey стили применялись к кнопкам с тем же id в окнах почты).
[*] Рефакторинг кода.
[*] Убрано использование deprecated E4X.
[*] Удаление незащищенных cookies по таймеру теперь использует один глобальный таймер для всех окон.
[x] Исправлено удаление observer'а изменения разрешений.
[+] Добавлена возможность при удалении незащищенных cookies сохранять cookies с открытых в данный момент сайтов (настройки removeAllUnprotectedCookies и useBaseDomain.preserveCurrentSiteCookies).
[+] Пункт контекстного меню "Удалить незащищённые cookies" заменен на два: "Удалить все незащищённые cookies" (старое поведение) и "Удалить незащищённые cookies" (cookies с открытых в данный момент сайтов не удаляются).
[+] Добавлен хак для обновления встроенного списка исключений в Firefox (см. "observe: function (" в chrome://browser/content/preferences/permissions.js, cookies при удалении не обновляются по аналогичной причине, см. chrome://browser/content/preferences/cookies.js).
[+] Добавлен пункт контекстного меню "Удалить ВСЕ cookies".
[+] Добавлена возможность отображать политику по умолчанию (настройка "showDefaultPolicy").
[+] Добавлена поддержка расширения Cookies Manager+.
[*] Улучшен текст всплывающих подсказок и пунктов меню.
[-] Периодическое удаление незащищенных cookies теперь отключено по умолчанию.
[+] Добавлена настройка "toggleMode" для изменения переключаемого разрешения.
[+] Добавлена настройка "moveToStatusBar" для перемещения кнопки в строку состояния (SeaMonkey, Firefox <= 3.6).
[+] Добавлен запрос на подтверждение удаления cookies (настройка "confirmRemoval").
[x] Исправлено удаление незащищенных cookies по таймеру после закрытия первого окна с кнопкой в Firefox 3.6.
[x] Некорректно обрабатывались открытые окна с настройками разрешений других типов.
[+] Добавлена настройка "reusePermissionsWindow", разрешающая использовать ранее открытое окно с настройками разрешений другого типа.
[*] Подкорректирована функция для закрытия окон нажатием на Escape.
[+] Добавлена поддержка временных исключений.
[*] Улучшено обновление окна исключений при удалении исключений извне (в оригинальном менеджере исключений это не реализовано).
[*] Улучшена производительность при открытии окна: контекстное меню создается только после «запроса» пользователя.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3624-03-2013 16:28:50

Raf-9600
Участник
 
Группа: Members
Зарегистрирован: 15-05-2007
Сообщений: 560
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Вот только что перешел на эту версию из древней, от 2011 года. Перечень того, что раньше больше нравилось:
1. Иконки состояния "по умолчанию" и "разрешено" были разными.
2. Раньше один раз кликнув по кнопке, состояние менялось на разрешено, второй раз - на заблокировано. В общем хотелось бы чтобы сейчас было так же.

Отредактировано Raf-9600 (24-03-2013 16:29:26)


Иногда мне кажется, что лучшие программисты мира и лучшие технические умы работают только над одним - как сделать так, чтоб на новом скоростном железе тормозило также, как на хламе 10 летней давности.
(с)

Отсутствует

 

№3724-03-2013 16:51:02

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Raf-9600 пишет

1. Иконки состояния "по умолчанию" и "разрешено" были разными.

Они и сейчас разные, но дополнительно отображается состояние по умолчанию полупрозрачным значком.
Можно или перерисовать иконки, или отключить:

Выделить код

Код:

showDefaultPolicy: true, // Show default cookies policy

– сменить «true» на «false».

Raf-9600 пишет

2. Раньше один раз кликнув по кнопке, состояние менялось на разрешено, второй раз - на заблокировано. В общем хотелось бы чтобы сейчас было так же.

Ммм... не было, вроде, такого. :|


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№3824-03-2013 17:10:35

Raf-9600
Участник
 
Группа: Members
Зарегистрирован: 15-05-2007
Сообщений: 560
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Infocatcher пишет

Ммм... не было, вроде, такого.

Было!!! Я тысщю раз пользовался этой кнопкой! Хотя возможно это была не конкретно твоя, а чья-то модификация, этого уже не помню...
Во всяком случае, по-моему было весьма удобно.

Infocatcher пишет

Они и сейчас разные, но дополнительно отображается состояние по умолчанию полупрозрачным значком.

Хмм... Если честно, то на той картинке ссылку на которую дал, иконки "Разрешить" и "По умолчанию разрешить" практически идентичны.

Кстати, как задать чтобы по умолчанию куки были временно разрешены?

Отредактировано Raf-9600 (24-03-2013 17:19:56)


Иногда мне кажется, что лучшие программисты мира и лучшие технические умы работают только над одним - как сделать так, чтоб на новом скоростном железе тормозило также, как на хламе 10 летней давности.
(с)

Отсутствует

 

№3924-03-2013 18:01:19

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Raf-9600 пишет

Хотя возможно это была не конкретно твоя, а чья-то модификация, этого уже не помню...

На такие случаи надо делать резервные копии. :)

Raf-9600 пишет

Во всяком случае, по-моему было весьма удобно.

Да я не спорю.
Но там есть большое визуальное неудобство при переключении разрешений для www.example.com, если уже есть исключение для example.com.
Можно попробовать вот так:
Simplify options.useBaseDomain.* usage
Experimental: cycle switch between options.toggleMode
(результат)

(Что-то я не поспеваю за меняющимся текстом. Править лень. :))

Raf-9600 пишет

а перерисовать как?

Взять отсюда исходник или готовую картинку с иконками, отредактировать, сохранить в PNG, закодировать в base64 и вставить сюда:

Выделить код

Код:

list-style-image: url("data:image/png;base64,...") !important;\n\
Raf-9600 пишет

Странно, но у меня вариант "По умолчанию" и "Разрешено" абсолютно одинаков. Т.е. даже на сайтах которые я не добавлял в белый/черный список.

Ну, не знаю. Или что-то все-таки не срабатывает, или монитор такой.


Raf-9600 пишет

Кстати, как задать чтобы по умолчанию куки были временно разрешены?

Настройки – Приватность – Firefox: будет использовать ваши настройки хранения истории
А дальше должно быть понятно.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№4024-03-2013 18:23:10

Raf-9600
Участник
 
Группа: Members
Зарегистрирован: 15-05-2007
Сообщений: 560
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Infocatcher пишет

(результат)

Скопипастил в "инициализацию", потом кликнул ПКМ по кнопке и браузер "испортился" - пришлось перезапускать =\

Infocatcher пишет

Настройки – Приватность – Firefox: будет использовать ваши настройки хранения истории

Но там есть только либо хранить, либо не хранить, либо хранить до закрытия, а пункта "хранить определённое время" - нет. Вот прошлая кнопка как рас по умолчанию временно хранила.

Infocatcher пишет

На такие случаи надо делать резервные копии.

Вот

Выделить код

Код:

// http://infocatcher.ucoz.net/js/cb/cookiesPermissions.js

// Cookies Permissions button for Custom Buttons
// (code for "initialization" section)

// (c) Infocatcher 2010-2011
// version 0.1.10 - 2011-07-13

//= Settings begin
this.options = {
    removeUnprotectedCookiesInterval: 30*60*1000, // -1 for disable
    useBaseDomain: false // Use google.com instead of www.google.com
};
this._images = {
    // Used Fugue and Diagona icons (http://p.yusukekamiyamane.com/)
    default: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABTVBMVEW2XQONRwG6XwSJRQGEQwC+YQS8YAXbnVu2XQO+YQSlaCqJRQGxWwPIgTfTij+MRgGNRwG3XgStbCyTSgGEQwCHRAC/YgS7gEa6XwSDQgDruH6CQgCsVwO/YgSCQgClVALKlF6YTQKfUAK/YgTao2rPl1/zyJPMgDPltIC/YgTeq3a4XgSuZyLMlFyRSQHns3fbp3OCQgDZpnLir3visHxFIwFHJAH0ypfpuofwxJHqvInltYKATSTXlE/frXrTk1H40J3erHn2zZq8dzDisX7tvIPxxJH816Ten1rrt3rsv4yseVHgr3zrvInvw5Dzypd7TCb1zZrDoG3zx5PyyJX81qPcp27vwY3dqXZxOByAVivIhkPYnWHalkzXlVDyxpLmtoPdn13js4Dnt4KEXi/50p/hr3yka0jhp2q7kWP+26jbp3P3z5y5jWHuwY6VLnI4AAAAN3RSTlMAAAAAAAB0zgkJ2BhDurOcDHjRUQygPeIRWOOffoXAn/GOpW7o7fnz+gD6tPr60fT7APz8+wAAOKgm0AAAAOBJREFUeF5Fy8V2wzAUANHnJDWHmRnKXMl2mJlTZub/X1ayF13MZs65AKY1kuBLR6Npn2ACYwRYWyiXC9nYgDF4J4dWn/MV4pw8Heuyddx5Ri/Vztgq634zf9PtnSnKxywT0f3u4q71UCr20fdG/N+/3z6py70UUF/VfeV6gLNJiGRm9UuF+tOrUdnlhnjh53fSnxJ/3qj57Q5IHSEV4zZWl19boldiIJnF+ELTtAHe3gl6zAy4XeX7UbP5SP2+hQyH3V8bvr4NqWfoYCSvmDg4TFBvDLMnGI7FwsSTcXzyBxn2Ki7PT5A9AAAAAElFTkSuQmCC",

    deny: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABoVBMVEW2XQO6XwTMIgC+YQS/YgS6XwS3XgS2XQPbnVvIgTexWwPTij+8YAXzyJO/YgSDQgCCQgC/YgSEQwCTSgHao2qsVwOfUAKNRwGMRgGHRAClVAKNRwGYTQK/YgSCQgDruH6+YQTmek7bp3Peq3bns3fRVCTltIDuUi/isHzPl1+4XgTMgDOtbCz////rSynbNhS7gEbtTizzVjTVLgyJRQGlaCrKlF7ZpnLir3vNWy/QJwXQJwWJRQGvLwDLIwDMIgDMIgD0ypf/ZkTMIgDpuofwxJHdORfuTy3qSijhPhziPx340J350p/sv4z3z5zuwY71zZrpSSf816TqvIn5f1i5jWHvw5D81qPyyJX2Wjjrt3pxOBzltYKEXi/7YT+seVHDoG3vwY3alkz+26jfrXrmtoPrvInisX7dWjPzypfIhkP6a0jzx5PyxpLlYz3erHngr3zhr3y1VjPVLgzrVjTdqXbyn3LYMxG7kWPkYjv/d1XOUC2ATST6l234p3rQJwXbNRP2eU/wUzHXlE/2zZqAViv3pnntvIPdn13en1rcp271qEeUAAAAQXRSTlMAAAAJPRF4Cc66Q7N0+W5YwIUMUeh+pQycoJ8AjgCf4wD2+/r0jvq4++2089EAurXiuvxZGNjx/Pz4ggAAkri1WY/ZPZMAAAD5SURBVHhePYtTkwNBGAC/ZHdj2znaNmZmGTtH27aNX32bpOoe+qG7qgEUVTIUbbJaTTSlgEpgDPqw0RjWG5hKUKs0qLi2XEQalboUgjptIbOAYtFMQasr/y2tqz+zKxx3nXI4y3/d/sHX99t9HCVqff//4wvGuc8aF5T+KIo9vPKE8IvVAXA6Uu8f3KVwdfO7i/dm6sHXkE/uxO+kw8QFviVSI7iaUJZl01J2WnavlIZAM8vOzUfEJdnNNjEC9rb1jc2tbVF2e3uH2AluT9fR8cnp2TnxuLt7+F7w93n7BwaHhp8EjIXnkVHwj9nMIYslND5ByOSUUvkHLXQ4wgD5LHQAAAAASUVORK5CYII=",
    allowSession: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABlVBMVEW2XQO6XwSNRwG2XQO+YQS8YAXTij/bnVu6XwS/YgSxWwPIgTe3XgSYTQK/YgSCQgDao2qsVwO/YgTzyJPruH5mZmalVAK+YQSCQgCfUALMgDPns3eRdlvltIC4XgSwlnyKiYjisHzeq3bPl1+/YgSTSgGtbCx1dXWMRgG7gEZvb2+JRQGHRAClaCrKlF7ZpnLir3uYfmTbp3NqampqamqJRQGEQwCDQgBxWD5mZWRmZmZmZmaNRwH0ypdmZmb3+//l8v/x+P/r9f/wxJGZmZn8/f/puof81qO5jWHuwY7vw5C8xMzd7v+IjI/Q3uv1zZqtra3sv4yoqKn////50p/t7vCorbL816SEiIv40J2zvch8fHyDg4PY2NjP0dTalkyVhnjen1rrt3qlrLLg8P/Ky8yunYu7kWPerHngr3zhr3ySbFbtvIPdn13XlE+xo5TqvIn3z5yAVivvwY3UuZjOspFxOBz+26jTuJbltYLzx5PDoG3yxpLzypfGspmGeG3isX72zZqEXi/frXrmtoPrvImATSRVZpH6AAAAPXRSTlMAAAAJCXSzzhE9Q7p4jm7A6H6F+eMAnwCfpfP0jvq09rj7+u0AUdG1nOJZGKDY8fz8+PuCAAAMWJK4tVkMLKHsBAAAAPdJREFUeF49i+OPA1EcAH/tbm1ee7ZtvffWtc2zbRt/923b5CaZL5MMgKJJltaZ7XazjlZAI2hVaqfD4VSrtI1AGTXId/fkQxojVQu9ekMw94nShVzQoK//7c1rG5tXPL8Xs9rqf8vj8/HJ6W8CXXS7///rXUE4u5/2Qu0voPRrvJJKVeIdJrBZYx+X/E0yI+6IYibZCu42f+Al8VYlRCCEVDvB24XOJanMsqwgy5bB1CNJtw8ljuMwxlmuBH39X98/7+shZouRCQ3A6uDQ/sHhUSS6LRONDINyZHRsfGJyKl8Mh4v5mVlQzs0veCwWz+ISxssrLtcfnUo4lyXB664AAAAASUVORK5CYII=",
    allow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABfVBMVEW2XQNVu1W6XwRbwVvIgTfbnVu/YgSNRwGxWwO3XgS6XwS8YAXTij++YQS2XQOCQgDKlF6/YgSsVwPzyJOlVALao2q+YQQRdxG/YgSCQgCDQgDruH64XgTMgDPns3fltICfUALeq3a/YgSYTQLPl18rkSuTSgGtbCyI7ogjiSONRwGMRgG7gEYbgRvisHyJRQGHRAClaCrZpnLir3vbp3NohyoVexWJRQGEQwD0ypfpuoeI7oj81qNv1G9kymTwxJErkSs6oDoymDJ533lEqkRApkDyyJVVu1UbgRvvw5D816QjiSPsv4z3z5z1zZrDoG3+26jYnWHrvInqvIn40J0VexURdxHfrXrzx5PyxpLTk1Halkzen1risX7rt3rvwY350p/zypeseVHdqXa8dzDerHngr3zhr3yka0jdn13XlE+ATSSC6ILIhkPnt4Lcp27bp3PXlVC7kWPhp2rltYLtvINbwVtxOBy5jWHuwY6EXi/mtoP2zZqAViuYtWjcX2nxAAAAOXRSTlMAAAAAus49AEN4EXSzCQnA8YV++Z/oAABun1jjtPP0+qX6AI7tAFHRAAAMnOIA+xig2Pz8+9IAAAzfXL77AAAA80lEQVR4XkXLVXODQBiF4Y8EEuLeRurubruLE3dP1d3d5bcXyEXPzLl5Zx4AU4d2lyXs84UtLhO0g93hjAUCMafD3g5uG4O4colDjM2thwGWzmQ/0X49m6FZw3d1b23v7oniYzHkN3zP+sbLxeVVHhX6g//+6eG2llxaBt3XDb9ZOcTxOPhDxe8f8VfzdzfVBElAsPf94yAvy6hwdCyTaxn6ZlANY4UoyXuFqKoCg0MYvz1LPJEkwvPSMIyMtr6qOzlBIEQQcmPjMDE5dXJ6dp5+1ZY2m6fBOjs3711Y9DZSqQZFUStgXV2LRjyeSLTZ7NT3B27ZNHT6lMZzAAAAAElFTkSuQmCC",

    notAvailable: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABL1BMVEVdXV1HR0dfX19FRUVhYWFCQkJgYGCbm5thYWFCQkJeXl5aWlqAgICAgIBCQkJdXV1oaGhERERfX19iYmJGRkaJiYlsbGxKSkpFRUVHR0diYmJQUFCXl5dBQUGUlJRiYmLExMRNTU2ioqJBQUG1tbVXV1dUVFSzs7Oqqqqvr6+np6doaGheXl6AgICUlJRJSUmwsLBBQUFiYmKmpqavr68jIyMkJCTGxsa6urq4uLjR0dG0tLTAwMCdnZ3BwcHExMSwsLDJycm9vb2tra21tbWsrKyysrLNzc2/v7/MzMyurq6mpqbCwsJ9fX2UlJR2dnZERERWVlaPj4+NjY2GhoZaWlqnp6eampqSkpJQUFC5ubmTk5Ovr690dHTV1dWzs7PDw8OlpaVRUVHLy8upqalgbY2aAAAAN3RSTlMAAAAAAAB0zgkMeEO64lgJ2KARPZyz0VEYDG6l7cDxhfmO6J/jfp/6+vv7+rTz+tH0AAD8/AAA+SwWFgAAANxJREFUeF5Fy0VyxDAUANHvmcQ4zMwcRklGGMYwM9z/DJHsRRa96aoHENiiiclCtVpIigHwR4JPt2q1VppP+CMqC0h9f1CRIEfZOFZCunqHpnNVDyme393bGB8z07x2Gm3PH1qfz8bLt4t+ep1/v9yMsDUoAvNzzz8aa1KqQ7vhOFcm81+3eJjJQqd7M0PuE/W/F+NwKg/FPsKErAi27ndi8RwH9RIhl5qmrcn+QUQKcpDNDEfYtifMH23TkU+Fx4vXtwXzHBtcLh6rnJxWmPdHUIo0y+Um9XScnf8BesYnYJJTobwAAAAASUVORK5CYII=",
    unknown: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABd1BMVEW2XQO6XwSNRwG/YgTbnVu2XQPIgTexWwO+YQS3XgTTij+6XwS8YAXzyJO/YgS/YgSsVwPruH6fUAK/YgSlVAKMRgGtbCzao2qNRwGYTQLPl1+TSgG+YQTeq3bisHzns3fCjQDHlAC4XgTMgDPAjQDltIC5hgC7gEaJRQGHRAClaCrKlF7ZpnLbp3OJRQGEQwCDQgCCQgCCQgCZYACqdwD0ypfMmQDpuofwxJEzMzPsv4z/2DX/0RbqzmSzgAD/4Vvjv0H/+sf1zZrVogD40J3ltYLcrxverHngr3z816T//93AjQD/86i/jADZpgDdqgD/6oLvw5D/zADOmwD81qP2zZquewBxOBzdn13Zpz3tvIPfqTXImTHmtoPrvInisX7Nmz/Yp0PyxpLyyCjMrzTzx5PvwY3zypd7TCbhr3yATSTfrXr3z5zjs0TXlE/rt3ren1ruwY7yyJX50p+EXi/qvInxxJHalky7kWO5jWH+26iAVivDoG1a7qJEAAAANXRSTlMAAAA9zgm6Qwl4sxF0+YVufuOlAJ+c0egMju1RAPr79IwAtPMA+oDiGKDY8fz7AAxYn8DggGfepWIAAADwSURBVHheRctjcwNhFIbhk+zGtmrbL9axrdq23R/fbNKZnpnnfLhnLgBNX2dGxmG3OxijBnrBYjW7bDaX2WrpBZ2JRc2vnyZiTTo1eAz6Wu4FPSdzNb2h60dG3x/uzyj9iAecXT94erS1cXfFo5t+77/frlRun+bdoPqk6sv5fJmEQ+AMxFvflNIdKRaTNv0R8I5/Pp7zF3yjiLliwxcE9wB6JeTtMFrFXDU6NAyhMCHrqVRBUTCnKIUxiPivd/f2D9KCcHwiCOkJCPomM9lLWRRFzHWeDNqp6ZnZuXb979qgXVhcWl5ZlUs4kcAlee0XlMM0PA1YpgYAAAAASUVORK5CYII="
};
this._strings = {
    en: { // First entry used as default
        defaultTooltiptext: "Cookies: Default",
        denyTooltiptext: "Cookies: Deny",
        allowSessionTooltiptext: "Cookies: Allow Session",
        allowTooltiptext: "Cookies: Allow",
        notAvailableTooltiptext: "Cookies: n/a",
        unknownTooltiptext: "Cookies: ???",

        defaultLabel: "Default",
        defaultAccesskey: "f",
        denyLabel: "Deny",
        denyAccesskey: "D",
        allowSessionLabel: "Allow Session",
        allowSessionAccesskey: "S",
        allowLabel: "Allow",
        allowAccesskey: "A",

        showPermissionsLabel: "Show Exceptions…",
        showPermissionsAccesskey: "x",
        showCookiesLabel: "Show Cookies…",
        showCookiesAccesskey: "h",
        removeUnprotectedCookiesLabel: "Remove Unprotected Cookies",
        removeUnprotectedCookiesAccesskey: "R",

        buttonMenu: "Button menu",
        buttonMenuAccesskey: "m"
    },
    ru: {
        defaultTooltiptext: "Cookies: По умолчанию",
        denyTooltiptext: "Cookies: Блокировать",
        allowSessionTooltiptext: "Cookies: Разрешить на сессию",
        allowTooltiptext: "Cookies: Разрешить",
        notAvailableTooltiptext: "Cookies: н/д",
        unknownTooltiptext: "Cookies: ???",

        defaultLabel: "По умолчанию",
        defaultAccesskey: "у",
        denyLabel: "Блокировать",
        denyAccesskey: "Б",
        allowSessionLabel: "Разрешить на сессию",
        allowSessionAccesskey: "с",
        allowLabel: "Разрешить",
        allowAccesskey: "Р",

        showPermissionsLabel: "Показать исключения…",
        showPermissionsAccesskey: "и",
        showCookiesLabel: "Показать cookies…",
        showCookiesAccesskey: "П",
        removeUnprotectedCookiesLabel: "Удалить незащищённые cookies",
        removeUnprotectedCookiesAccesskey: "д",

        buttonMenu: "Меню кнопки",
        buttonMenuAccesskey: "М"
    }
};
//= Settings end

this.hasModifier = function(e) {
    return e.ctrlKey || e.shiftKey || e.altKey || e.metaKey;
};

this.onclick = function(e) {
    if(e.target != this)
        return;
    var but = e.button;
    var hasModifier = this.hasModifier(e);
    if(but == 0 && !hasModifier) {
        this.togglePermission(this.cp.ACCESS_ALLOW);
        // Allow use "command" section only from hotkey:
        e.preventDefault();
        e.stopPropagation();
    }
    else if(but == 1 || but == 0 && hasModifier)
        this.openCookiesPermissions();
};
if(!this.hasOwnProperty("defaultContextId"))
    this.defaultContextId = this.getAttribute("context") || "custombuttons-contextpopup";
this.oncontextmenu = function(e) {
    if(e.target != this)
        return;
    this.setAttribute(
        "context",
        this.hasModifier(e)
            ? this.defaultContextId
            : this._mpId
    );
};

var s = this._strings;
for(var p in s) if(s.hasOwnProperty(p)) {
    this._defaultLocale = this._locale = p;
    break;
}
var currentLocale = Application.prefs.getValue("general.useragent.locale", "en");
if(s.hasOwnProperty(currentLocale))
    this._locale = currentLocale; // e.g. "ru-RU"
else if(/^([a-z]+)-/.test(currentLocale) && s.hasOwnProperty(RegExp.$1))
    this._locale = RegExp.$1; // e.g. "ru"
this._localeStrings  = s[this._locale];
this._defaultStrings = s[this._defaultLocale];
delete this._strings;
this._string = function(sid) {
    return this._localeStrings[sid] || this._defaultStrings[sid] || "(" + sid + ")";
};

this.permissionType = "cookie";
var cp = this.cp = Components.interfaces.nsICookiePermission;
this.PERMISSIONS_NOT_SUPPORTED = -1;

var parseFromXML = function(xml) {
    var pp = XML.prettyPrinting;
    XML.prettyPrinting = false;
    var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement;
    XML.prettyPrinting = pp;
    return elt;
};
this._mpId = this.id + "-context";
var mp = this._mp = this.appendChild(parseFromXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        id={this._mpId}
        onpopupshowing="
            if(event.target != this)
                return true;
            document.popupNode = this.parentNode;
            return this.parentNode.updMenu();"
        onpopuphidden="if(event.target == this) document.popupNode = null;">
        <menuitem type="radio" cb_permission={cp.ACCESS_DEFAULT}
            oncommand="this.parentNode.parentNode.removePermission();"
            label={this._string("defaultLabel")}
            accesskey={this._string("defaultAccesskey")} />
        <menuseparator />
        <menuitem type="radio" cb_permission={cp.ACCESS_DENY}
            oncommand="this.parentNode.parentNode.addPermission(Components.interfaces.nsICookiePermission.ACCESS_DENY);"
            label={this._string("denyLabel")}
            accesskey={this._string("denyAccesskey")} />
        <menuitem type="radio" cb_permission={cp.ACCESS_SESSION}
            oncommand="this.parentNode.parentNode.addPermission(Components.interfaces.nsICookiePermission.ACCESS_SESSION);"
            label={this._string("allowSessionLabel")}
            accesskey={this._string("allowSessionAccesskey")} />
        <menuitem type="radio" cb_permission={cp.ACCESS_ALLOW}
            oncommand="this.parentNode.parentNode.addPermission(Components.interfaces.nsICookiePermission.ACCESS_ALLOW);"
            label={this._string("allowLabel")}
            accesskey={this._string("allowAccesskey")} />
        <menuseparator />
        <menuitem
            oncommand="this.parentNode.parentNode.openCookiesPermissions();"
            label={this._string("showPermissionsLabel")}
            accesskey={this._string("showPermissionsAccesskey")} />
        <menuitem
            oncommand="this.parentNode.parentNode.showCookies();"
            label={this._string("showCookiesLabel")}
            accesskey={this._string("showCookiesAccesskey")} />
        <menuseparator />
        <menuitem
            oncommand="this.parentNode.parentNode.removeUnprotectedCookies();"
            label={this._string("removeUnprotectedCookiesLabel")}
            accesskey={this._string("removeUnprotectedCookiesAccesskey")} />
        <menuseparator />
        <menu
            label={this._string("buttonMenu")}
            accesskey={this._string("buttonMenuAccesskey")} />
    </menupopup>
));
var cbPopup = document.getElementById(this.defaultContextId);
if(!cbPopup)
    Components.utils.reportError("[Custom Buttons :: Cookies Permissions]: cb menu not found");
else {
    cbPopup = cbPopup.cloneNode(true);
    let id = "-" + this.id.match(/\d*$/)[0] + "-cloned";
    cbPopup.id += id;
    Array.slice(cbPopup.getElementsByAttribute("id", "*")).forEach(function(node) {
        node.id += id;
    });
    let menu = mp.lastChild;
    menu.appendChild(cbPopup);
}

this.__defineGetter__("pm", function() {
    delete this.pm;
    return this.pm = Components.classes["@mozilla.org/permissionmanager;1"]
        .getService(Components.interfaces.nsIPermissionManager);
});
this.__defineGetter__("io", function() {
    delete this.io;
    return this.io = Components.classes["@mozilla.org/network/io-service;1"]
        .getService(Components.interfaces.nsIIOService);
});
this.__defineGetter__("oSvc", function() {
    return Components.classes["@mozilla.org/observer-service;1"]
        .getService(Components.interfaces.nsIObserverService);
});
this.__defineGetter__("wm", function() {
    return Components.classes["@mozilla.org/appshell/window-mediator;1"]
        .getService(Components.interfaces.nsIWindowMediator);
});
this.__defineGetter__("tld", function() {
    delete this.tld;
    return this.tld = Components.classes["@mozilla.org/network/effective-tld-service;1"]
        .getService(Components.interfaces.nsIEffectiveTLDService);
});
this.__defineGetter__("currentHost", function() {
    var loc = content.location;
    if(["view-source:", "about:", "chrome:", "resource:", "javascript:", "data:"].indexOf(loc.protocol) == -1) try {
        return loc.hostname;
    }
    catch(e) {
    }
    return "";
});
this.__defineGetter__("currentBaseDomain", function() {
    var host = this.currentHost;
    if(host) try {
        return this.tld.getBaseDomainFromHost(host);
    }
    catch(e) {
    }
    return host;
});
this.__defineGetter__("isSeaMonkey", function() {
    return Components.classes["@mozilla.org/xre/app-info;1"]
        .getService(Components.interfaces.nsIXULAppInfo)
        .name == "SeaMonkey";
});
this.getURI = function(host) {
    if(host.indexOf(":") != -1 && /^[:\da-f.]+$/.test(host)) // IPv6
        host = "[" + host + "]";
    try {
        return this.io.newURI("http://" + host, null, null);
    }
    catch(e) {
        Components.utils.reportError("[Custom Buttons :: Cookies Permissions] Invalid host: \"" + host + "\"");
        throw e;
    }
};

this.showMenu = function(e, isContext, mp) {
    document.popupNode = this.ownerDocument.popupNode = this;
    if(!mp)
        mp = this._mp;
    if("openPopupAtScreen" in mp)
        mp.openPopupAtScreen(e.screenX, e.screenY, isContext);
    else
        mp.showPopup(this, e.screenX, e.screenY, isContext ? "context" : "popup", null, null);
};
this.updMenu = function() {
    var permission = this.getPermission();
    //if(permission == this.PERMISSIONS_NOT_SUPPORTED)
    //    return false;

    var noPermissions = permission == this.PERMISSIONS_NOT_SUPPORTED;
    Array.forEach(
        this._mp.getElementsByAttribute("cb_permission", "*"),
        function(mi) {
            mi.hidden = noPermissions;
            var ns = mi.nextSibling;
            if(ns && ns.localName == "menuseparator")
                ns.hidden = noPermissions;
        }
    );

    var mi = this._mp.getElementsByAttribute("cb_permission", permission);
    mi.length && mi[0].setAttribute("checked", "true");
    return true;
};

this.openCookiesPermissions = function() {
    if(this.isSeaMonkey) {
        this.openCookiesPermissionsSM();
        return;
    }

    // chrome://browser/content/preferences/privacy.js
    // gPrivacyPane.showCookieExceptions()
    var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
        .getService(Components.interfaces.nsIStringBundleService)
        .createBundle("chrome://browser/locale/preferences/preferences.properties");
    var params = { blockVisible   : true,
                   sessionVisible : true,
                   allowVisible   : true,
                   prefilledHost  : this.currentHost,
                   permissionType : this.permissionType,
                   windowTitle    : bundle.GetStringFromName("cookiepermissionstitle"),
                   introText      : bundle.GetStringFromName("cookiepermissionstext") };
    var win = this.wm.getMostRecentWindow("Browser:Permissions");
    if(win)
        win.focus();
    else
        win = window.openDialog("chrome://browser/content/preferences/permissions.xul", "_blank", "", params);

    this.tweakWindow(win);
};
this.openCookiesPermissionsSM = function() {
    var host = this.currentHost;
    var win = this.wm.getMostRecentWindow("mozilla:cookieviewer");
    var select = function select(e) {
        win.removeEventListener("load", select, false);
        var doc = win.document;
        doc.getElementById("tabbox").selectedTab = doc.getElementById("permissionsTab");
        var tb = doc.getElementById("cookie-site");
        tb.value = host;
        win.buttonEnabling(tb);
    };
    if(win) {
        win.focus();
        select();
    }
    else {
        win = window.openDialog("chrome://communicator/content/permissions/cookieViewer.xul", "_blank", "");
        win.addEventListener("load", select, false);
    }
};
this.tweakWindow = function(win) {
    var keypressHandler = function(e) {
        if(e.keyCode == e.DOM_VK_ESCAPE)
            win.close();
    };
    win.addEventListener("keypress", keypressHandler, false);
    win.addEventListener("unload", function destroy(e) {
        var win = e.target.defaultView;
        if(win !== win.top || e.target.location.protocol != "chrome:")
            return;
        win.removeEventListener(e.type, destroy, false);
        win.removeEventListener("keydown", keypressHandler, false);
    }, false);
};

this.addPermission = function(capability) {
    // capability:
    //  this.cp.ACCESS_DENY
    //  this.cp.ACCESS_SESSION
    //  this.cp.ACCESS_ALLOW

    var host = this.options.useBaseDomain
        ? this.currentBaseDomain
        : this.currentHost;
    if(!host)
        return;

    var pm = this.pm;
    var enumerator = pm.enumerator;
    while(enumerator.hasMoreElements()) {
        var permission = enumerator.getNext()
            .QueryInterface(Components.interfaces.nsIPermission);
        if(permission.type == this.permissionType && permission.host == host && permission.capability == capability)
            return;
    }

    pm.add(this.getURI(host), this.permissionType, capability);
};
this.removePermission = function() {
    var host = this.currentHost;
    if(!host)
        return;
    var uri = this.getURI(host);
    var permission = this.pm.testPermission(uri, this.permissionType);
    this.pm.remove(host, this.permissionType);
    while(this.pm.testPermission(uri, this.permissionType) == permission) {
        var parentHost = host.replace(/^[^.]*\./, "");
        if(parentHost == host)
            break;
        host = parentHost;
        this.pm.remove(host, this.permissionType);
    }
};
this.togglePermission = function(capability) {
    var permission = this.getPermission();
    if(permission == this.PERMISSIONS_NOT_SUPPORTED)
        return;
    if(permission == capability)
        this.removePermission();
    else
        this.addPermission(capability);
};
this.getPermission = function() {
    var host = this.currentHost;
    return host
        ? this.pm.testPermission(this.getURI(host), this.permissionType)
        : this.PERMISSIONS_NOT_SUPPORTED;
};
this.showCookies = function() {
    if(this.isSeaMonkey) {
        this.showCookiesSM();
        return;
    }
    var win = this.wm.getMostRecentWindow("Browser:Cookies");
    var host = this.currentHost;
    var setFilter = function setFilter(e) {
        win.removeEventListener("load", setFilter, false);
        var doc = win.document;
        var tb = doc.getElementById("filter");
        if(!tb)
            return;
        tb.value = host;
        tb.doCommand();
    };
    if(win) {
        win.focus();
        host && setFilter();
    }
    else {
        win = window.openDialog("chrome://browser/content/preferences/cookies.xul", "_blank", "");
        host && win.addEventListener("load", setFilter, false);
    }
    this.tweakWindow(win);
};
this.showCookiesSM = function() {
    var host = this.currentHost;
    var win = this.wm.getMostRecentWindow("mozilla:cookieviewer");
    var setFilter = function setFilter(e) {
        win.removeEventListener("load", setFilter, false);
        var doc = win.document;
        doc.getElementById("tabbox").selectedTab = doc.getElementById("cookiesTab");
        var tb = doc.getElementById("filter");
        tb.value = host;
        tb.doCommand();
    };
    if(win) {
        win.focus();
        setFilter();
    }
    else {
        win = window.openDialog("chrome://communicator/content/permissions/cookieViewer.xul", "_blank", "");
        win.addEventListener("load", setFilter, false);
    }
};
this.removeUnprotectedCookies = function() {
    var cm = Components.classes["@mozilla.org/cookiemanager;1"]
        .getService(Components.interfaces.nsICookieManager);
    var cp = this.cp;
    var pm = this.pm;
    var remove = [
        cp.ACCESS_DEFAULT,
        /*cp.ACCESS_ALLOW,*/
        cp.ACCESS_DENY,
        cp.ACCESS_SESSION
    ];
    var cookies = cm.enumerator;
    while(cookies.hasMoreElements()) {
        var cookie = cookies.getNext()
            .QueryInterface(Components.interfaces.nsICookie);
        var host = cookie.host;
        var uri = this.getURI(host);
        if(remove.indexOf(pm.testPermission(uri, this.permissionType)) != -1)
            cm.remove(host, cookie.name, cookie.path, false);
    }
};

this.updButtonState = function() {
    var cp = this.cp;
    var permission = this.getPermission();
    this.disabled = permission == this.PERMISSIONS_NOT_SUPPORTED;
    switch(permission) {
        case this.PERMISSIONS_NOT_SUPPORTED:
            this.image = this._images.notAvailable || this._images.default;
            this.tooltipText = this._string("notAvailableTooltiptext");
        break;
        case cp.ACCESS_DEFAULT:
            this.image = this._images.default;
            this.tooltipText = this._string("defaultTooltiptext");
        break;
        case cp.ACCESS_ALLOW:
            this.image = this._images.allow || this._images.default;
            this.tooltipText = this._string("allowTooltiptext");
        break;
        case cp.ACCESS_DENY:
            this.image = this._images.deny || this._images.default;
            this.tooltipText = this._string("denyTooltiptext");
        break;
        case cp.ACCESS_SESSION:
            this.image = this._images.allowSession || this._images.default;
            this.tooltipText = this._string("allowSessionTooltiptext");
        break;
        default:
            this.image = this._images.unknown || this._images.default;
            this.tooltipText = this._string("unknownTooltiptext");
    }
};

var dummy = function() {};
this.progressListener = {
    button: this,
    onStateChange: dummy,
    onProgressChange: dummy,
    onLocationChange: function(aWebProgress, aRequest, aLocation) {
        this.button.updButtonState();
    },
    onStatusChange: dummy,
    onSecurityChange: dummy
};
gBrowser.addProgressListener(this.progressListener/*, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION*/);

this.permissionsObserver = {
    button: this,
    observe: function(subject, topic, data) {
        if(topic != "perm-changed")
            return;
        var permission = subject.QueryInterface(Components.interfaces.nsIPermission);
        if(permission.type == this.button.permissionType /*&& permission.host == this.button.currentHost*/)
            this.button.updButtonState();
    }
};
this.oSvc.addObserver(this.permissionsObserver, "perm-changed", false);

if(this.options.removeUnprotectedCookiesInterval > 0) {
    setInterval(function(_this) {
        _this.removeUnprotectedCookies();
    }, this.options.removeUnprotectedCookiesInterval, this);
}

this.updButtonState();

this.onDestroy = function() {
    gBrowser.removeProgressListener(this.progressListener);
    this.oSvc.removeObserver(this.permissionsObserver);
};

Иногда мне кажется, что лучшие программисты мира и лучшие технические умы работают только над одним - как сделать так, чтоб на новом скоростном железе тормозило также, как на хламе 10 летней давности.
(с)

Отсутствует

 

№4124-03-2013 18:36:42

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Raf-9600 пишет

Но там есть только либо хранить, либо не хранить, либо хранить до закрытия, а пункта "хранить определённое время" - нет. Вот прошлая кнопка как рас по умолчанию временно хранила.

Прошлая кнопка не могла ничего делать сверх настроек Firefox.
network.cookie.lifetimePolicy

Raf-9600 пишет

Вот

Это оригинальная кнопка. И у меня она только переключает разрешить/по умолчанию.

Добавлено 24-03-2013 18:38:20

Raf-9600 пишет

Скопипастил в "инициализацию", потом кликнул ПКМ по кнопке и браузер "испортился" - пришлось перезапускать =\

Странно. Копировать, кстати, лучше по ссылке «Raw» – там отступы не ломаются.

Отредактировано Infocatcher (24-03-2013 18:38:20)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№4224-03-2013 20:28:40

Raf-9600
Участник
 
Группа: Members
Зарегистрирован: 15-05-2007
Сообщений: 560
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Infocatcher пишет

Странно. Копировать, кстати, лучше по ссылке «Raw» – там отступы не ломаются.

Помогло.

Infocatcher пишет

Прошлая кнопка не могла ничего делать сверх настроек Firefox.

У меня галлюцинации походу fc34dc50ea144827810c667a06591c2b.gif


Иногда мне кажется, что лучшие программисты мира и лучшие технические умы работают только над одним - как сделать так, чтоб на новом скоростном железе тормозило также, как на хламе 10 летней давности.
(с)

Отсутствует

 

№4314-05-2013 14:23:39

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: unknown 0.0

Re: [CB]Cookies Permissions

На [firefox] 21 стал удалять защищенные куки при нажатии на "удалить незащищенные куки".


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№4414-05-2013 15:39:31

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: [CB]Cookies Permissions

villa7 пишет

На [firefox] 21 стал удалять защищенные куки при нажатии на "удалить незащищенные куки".

А так?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№4514-05-2013 21:08:33

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: unknown 0.0

Re: [CB]Cookies Permissions

Infocatcher пишет

А так?

Так работает, спасибо.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№4614-05-2013 21:29:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 21.0

Re: [CB]Cookies Permissions

villa7 пишет

Так работает, спасибо.

Это хорошо. :)


Cookies Permissions 0.2.0.1 (2013-05-14) (это версия 0.2.0 - 2013-03-02 + это исправление)
[x] Исправлена обработка «защищенных» cookies в Gecko 21+.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№4714-07-2013 16:12:41

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 392
UA: Firefox 20.0

Re: [CB]Cookies Permissions

Замечательная кнопка, спасибо

Отсутствует

 

№4814-07-2013 16:16:29

trionZabilParol
Участник
 
Группа: Members
Зарегистрирован: 08-07-2013
Сообщений: 77
UA: Firefox 22.0

Re: [CB]Cookies Permissions

Лучше бы вы ее в дополнение переделали. И популярность и баг репорты.

Отсутствует

 

№4909-01-2014 21:53:45

pohunohi
Участник
 
Группа: Members
Зарегистрирован: 02-09-2009
Сообщений: 677
UA: Firefox 29.0

Re: [CB]Cookies Permissions

Где в коде выставить useBaseDomain в true чтобы убрать www. ? :sick:

Отсутствует

 

№5010-01-2014 00:18:22

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 26.0

Re: [CB]Cookies Permissions

pohunohi пишет

Где в коде выставить useBaseDomain в true чтобы убрать www. ? :sick:

Откуда убрать?
Видимо, где-то здесь:

var options = {
    ...
    useBaseDomain: { // If set to true, will use short domain like google.com instead of www.google.com
        addPermission: false, // Add (and toggle) permission action
        openPermissions: false,  // Filter in "Show Exceptions" window
        showCookies: true, // Filter in "Show Cookies" window
        removeCurrentSiteCookies: true, // For "Remove All Current Site Cookies" action
        preserveCurrentSitesCookies: true // For "removeAllUnprotectedCookies: false"
    },


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]