Toyota
Тойота Центр Екатеринбург Запад
г. Екатеринбург, ул. Металлургов, 60, к.1
Позвонить

В Тойота Центр Екатеринбург Запад (ООО «Компания АВТО ПЛЮС») обеспечивается законность обработки персональных данных и обеспечение их безопасности.

1. Назначение документа

Настоящая политика в отношении обработки персональных данных (далее — Политика) разработана в соответствии с Федеральным законом от 27.07.2006 N 152-ФЗ «О персональных данных» и определяет основные положения по обработке персональных данных, принятые в Тойота Центр Екатеринбург Запад (ООО «Компания АВТО ПЛЮС»). Положение о персональных данных.

2. Используемые термины и сокращения

ТЦЕЗ — Тойота Центр Екатеринбург Запад (ООО «Компания АВТО ПЛЮС»).

Персональные данные — любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных).

Субъект персональных данных — физическое лицо, к которому относится информация, содержащая персональные данные.

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

Автоматизированная обработка персональных данных — обработка персональных данных с помощью средств вычислительной техники.

Распространение персональных данных — действия, направленные на раскрытие персональных данных неопределенному кругу лиц.

Предоставление персональных данных — действия, направленные на раскрытие персональных данных определенному лицу или определенному кругу лиц.

Блокирование персональных данных — временное прекращение обработки персональных данных (за исключением случаев, если обработка необходима для уточнения персональных данных).

Уничтожение персональных данных — действия, в результате которых становится невозможным восстановить содержание персональных данных в информационной системе персональных данных и (или) в результате которых уничтожаются материальные носители персональных данных.

Обезличивание персональных данных — действия, в результате которых становится невозможным без использования дополнительной информации определить принадлежность персональных данных конкретному субъекту персональных данных.

Информационная система персональных данных — совокупность содержащихся в базах данных персональных данных и обеспечивающих их обработку информационных технологий и технических средств.

Машинный носитель информации (машинный носитель персональных данных) — материальный носитель, предназначенный для записи и воспроизведения информации средствами вычислительной техники, а также сопрягаемыми с ними устройствами.

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

Трансграничная передача персональных данных — передача персональных данных на территорию иностранного государства органу власти иностранного государства, иностранному физическому лицу или иностранному юридическому лицу.

Персональные данные — любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных).

3. Цели Политики

• Регламентация принципов и основных требований к обработке персональных данных в ТЦЕЗ;
• Приведение процессов обработки персональных данных в ТЦЕЗ в соответствие требованиям законодательства Российской Федерации;
• Обеспечение доступа субъектов персональных данных к информации, касающейся обработки их персональных данных в ТЦЕЗ.

4. Описание процесса

6.1 Общие положения

ТЦЕЗ осуществляет обработку персональных данных, а также определяет цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными. ТЦЕЗ организует обработку персональных данных в строгом соответствии с положениями Федерального закона от 27.07.2006 N 152-ФЗ «О персональных данных» (далее — Федеральный закон о персональных данных) и других нормативно-правовых актов Российской Федерации. ТЦЕЗ обеспечивает неограниченный доступ к настоящей Политике

6.2 Принципы обработки персональных данных

ТЦЕЗ принимает и обеспечивает выполнение следующих принципов обработки персональных данных:

• Обработка персональных данных ограничивается достижением конкретных, заранее определенных и законных целей. Не допускается обработка персональных данных, несовместимая с целями сбора персональных данных.

• Не допускается объединение баз данных, содержащих персональные данные, обработка которых осуществляется в целях, несовместимых между собой.

• Обработке подлежат только персональные данные, которые отвечают целям их обработки.

• Содержание и объем обрабатываемых персональных данных соответствуют заявленным целям обработки. Обрабатываемые персональные данные не должны быть избыточными по отношению к заявленным целям их обработки.

• При обработке персональных данных обеспечиваются точность персональных данных, их достаточность, а в необходимых случаях и актуальность по отношению к целям обработки персональных данных. В ТЦЕЗ принимаются необходимые меры по удалению или уточнению неполных или неточных данных.

• Хранение персональных данных осуществляется в форме, позволяющей определить субъекта персональных данных, не дольше, чем этого требуют цели обработки персональных данных, если срок хранения персональных данных не установлен федеральным законом, договором, стороной которого, выгодоприобретателем или поручителем по которому является субъект персональных данных. Обрабатываемые персональные данные подлежат уничтожению либо обезличиванию по достижении целей обработки или в случае утраты необходимости в достижении этих целей, если иное не предусмотрено федеральным законом.

• ТЦЕЗ, получившее доступ к персональным данным, обязано не раскрывать третьим лицам и не распространять персональные данные без согласия субъекта персональных данных, если иное не предусмотрено федеральным законом.

6.3 Условия и цели обработки персональных данных

6.3.1. Состав персональных данных

В ТЦЕЗ определен перечень обрабатываемых персональных данных, цели и условия обработки персональных данных. Настоящие положения зафиксированы в документе «Перечень персональных данных», принятом в ТЦЕЗ.

6.3.2. Основания для обработки персональных данных

Обработка персональных данных в ТЦЕЗ производится в следующих случаях:

• обработка персональных данных осуществляется с согласия субъекта персональных данных на обработку его персональных данных;

• обработка персональных данных необходима для достижения целей, предусмотренных международным договором Российской Федерации или законом, для осуществления и выполнения, возложенных законодательством Российской Федерации на ТЦЕЗ функций, полномочий и обязанностей;

• обработка персональных данных необходима для исполнения договора, стороной которого либо выгодоприобретателем или поручителем по которому является субъект персональных данных, а также для заключения договора по инициативе субъекта персональных данных или договора, по которому субъект персональных данных будет являться выгодоприобретателем или поручителем;

• обработка персональных данных необходима для осуществления прав и законных интересов ТЦЕЗ или третьих лиц при условии, что при этом не нарушаются права и свободы субъекта персональных данных;

• обработка персональных данных осуществляется в статистических или иных исследовательских целях, за исключением целей, требующих обязательного обезличивания персональных данных в соответствии с законодательством Российской Федерации.

6.4 Общее описание обработки персональных данных

При обработке персональных данных ТЦЕЗ совершает следующие действия (операции) или совокупность действий (операций), с использованием средств автоматизации или без использования таких средств с персональными данными: сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление и уничтожение. Обработка специальных категорий персональных данных, касающихся расовой, национальной принадлежности, политических взглядов, религиозных или философских убеждений, интимной жизни, не осуществляется. Данные о состоянии здоровья работников обрабатываются в ТЦЕЗ в соответствии с трудовым законодательством Российской Федерации.

Обработка сведений, которые характеризуют физиологические особенности человека и на основе которых можно установить его личность (биометрические персональные данные), осуществляется для некоторых категорий субъектов персональных данных исключительно на основании согласия на обработку персональных данных в письменной форме.

Для отдельных категорий персональных данных, обрабатываемых в ТЦЕЗ, допускается трансграничная передача в государства, обеспечивающие адекватную защиту персональных данных, либо в иные государства с согласия субъекта ПДн в письменной форме1. При этом ТЦЕЗ выполняет требования к такой передаче, определенные законодательством Российской Федерации. В ТЦЕЗ не осуществляется принятие на основании исключительно автоматизированной обработки персональных данных решений, порождающих юридические последствия в отношении субъекта персональных данных или иным образом затрагивающих его права и законные интересы.

п. 6.1 ТЦЕЗ осуществляет обработку персональных данных, а также определяет цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными.)

6.5 Сроки хранения и требования к уничтожению персональных данных

Сроки хранения персональных данных в ТЦЕЗ определены законодательством Российской Федерации и зависят от состава обрабатываемых данных. Перечень сроков хранения зафиксирован в документе «Перечень персональных данных», принятом в ТЦЕЗ. Персональные данные, обрабатываемые в ТЦЕЗ, подлежат уничтожению в следующих случаях:

• при достижении целей обработки или в случае утраты необходимости в их достижении;

• при получении соответствующего запроса от субъекта персональных данных, если это не противоречит требованиям к сроку хранения персональных данных либо документв, содержащих персональные данные, установленному федеральным законом или договором, стороной которого, выгодоприобретателем или поручителем по которому является субъект персональных данных;

• при получении соответствующего предписания от уполномоченного органа по защите прав субъектов персональных данных;

• по истечении определенных сроков хранения персональных данных.

6.6 Меры в области обработки и защиты персональных данных

ТЦЕЗ организует выполнение следующих мер, направленных на обеспечение выполнения обязанностей в области обработки и обеспечения безопасности персональных данных:

• назначение работников, ответственных:
a. за организацию обработки персональных данных;
b. за обеспечение безопасности персональных данных в информационных системах персональных данных.

• издание и внедрение локальных актов ТЦЕЗ по вопросам обработки и обеспечения безопасности персональных данных, направленных на предотвращение и выявление нарушений законодательства Российской Федерации, устранение последствий таких нарушений;

• применение правовых, организационных и технических мер по обеспечению безопасности персональных данных с учетом уровня их защищенности, а именно:
c. определение угроз безопасности персональных данных при их обработке в информационных системах персональных данных;
d. применение прошедших в установленном порядке процедуру оценки соответствия средств защиты информации;
e. оценка эффективности принимаемых мер по обеспечению безопасности персональных данных до ввода в эксплуатацию информационных систем персональных данных;

f. учет машинных носителей персональных данных;
g. реализация средств обнаружения фактов несанкционированного доступа к персональным данным и принимаются меры по каждому инциденту;
h. реализация возможности восстановления персональных данных, модифицированных или уничтоженных вследствие несанкционированного доступа к ним;
i. установление правил доступа к персональным данным, обрабатываемым в информационных системах персональных данных ТЦЕЗ, а также обеспечение регистрации и учета всех действий, совершаемых с персональными данными в информационных системах персональных данных;
j. контроль за принимаемыми мерами по обеспечению безопасности персональных данных и уровня защищенности информационных систем персональных данных.

• осуществление внутреннего контроля соответствия обработки персональных данных требованиям федерального закона о персональных данных и принятым в соответствии с ним нормативным правовым актам, требованиям к защите персональных данных, политике ТЦЕЗ в отношении обработки персональных данных, локальным актам ТЦЕЗ ;

• проведение оценки вреда, который может быть причинен субъектам персональных данных;

• ознакомление работников ТЦЕЗ, непосредственно осуществляющих обработку персональных данных, с положениями законодательства Российской Федерации о персональных данных, в том числе с требованиями к защите персональных данных, документами, определяющими политику ТЦЕЗ в отношении обработки персональных данных, локальными актами по вопросам обработки персональных данных;

• ознакомление работников сторонних организаций, непосредственно осуществляющих обработку персональных данных на территории ТЦЕЗ, с положениями законодательства Российской Федерации о персональных данных, в том числе с требованиями к защите персональных данных, документами, определяющими политику ТЦЕЗ в отношении обработки персональных данных, локальными актами по вопросам обработки персональных данных.

6.7 Права субъекта персональных данных

ТЦЕЗ гарантирует соблюдение прав субъектов персональных данных, определенных федеральным законом о персональных данных, а именно:

• право на уточнение его персональных данных, их блокирования или уничтожения в случае, если персональные данные являются неполными, устаревшими, неточными, незаконно полученными или не являются необходимыми для заявленной цели обработки;

• право на получение информации, касающейся обработки его персональных данных, в том числе содержащей:
a. подтверждение факта обработки персональных данных ТЦЕЗ;
b. правовые основания и цели обработки персональных данных;
c. цели и применяемые в ТЦЕЗ способы обработки персональных данных;
d. место нахождения ТЦЕЗ, сведения о лицах (за исключением работников ТЦЕЗ), которые имеют доступ к персональным данным или которым могут быть раскрыты персональные данные на основании договора с ТЦЕЗ или на основании федерального закона;

e. обрабатываемые персональные данные, относящиеся к соответствующему субъекту персональных данных, источник их получения, если иной порядок представления таких данных не предусмотрен федеральным законом;
f. сроки обработки персональных данных, в том числе сроки их хранения;
g. порядок осуществления субъектом персональных данных прав, предусмотренных федеральным законом;
h. информацию об осуществленной или о предполагаемой трансграничной передаче данных;

i. наименование или фамилию, имя, отчество и адрес лица, осуществляющего обработку персональных данных по поручению ТЦЕЗ, если обработка поручена или будет поручена такому лицу;
j. иные сведения, предусмотренные Федеральным законом о персональных данных.

• права субъекта персональных данных при обработке его персональных данных в целях продвижения товаров, работ, услуг на рынке, а также в целях политической агитации;

• права субъекта персональных данных при принятии решений на основании исключительно автоматизированной обработки иго персональных данных; • других, предусмотренных федеральными законами.

Дополнительную информацию, касающуюся обработки и обеспечения безопасности персональных данных, субъект персональных данных может получить, направив официальный запрос Тойота Центр Екатеринбург Запад в соответствии с федеральным законом о персональных данных.

1Перечень государств, обеспечивающих адекватную защиту прав субъектов персональных данных, определяется в соответствии с Федеральным законом «О персональных данных» и нормативными актами уполномоченного органа по защите прав субъектов персональных данных.

п. 6.5 Сроки хранения персональных данных в ТЦЕЗ определены законодательством Российской Федерации и зависят от состава обрабатываемых данных.

[[ state.complectation.FullTitle ]]
[[ state.complectation.Brand.Title ]]
[[ state.complectation.Model.Title ]] [[ state.complectation.Title ]]
[[ state.complectation.Modification.Drivetrain.Id | dwtFormat:'numeric' ]], [[ state.complectation.Modification.Engine.Volume | number:1 ]] л., [[ state.complectation.Modification.Engine.Fuel.title ]]?, [[ state.complectation.Modification.Transmission.Type | transmissionFormat:'long' ]]
Поле автоматически заполнится,
когда Вы определитесь с комплектацией Посмотреть автомобили в наличии
Поле автоматически заполнится,
когда Вы определитесь с комплектацией Посмотреть автомобили в наличии
[[ specialOfferService.getCurrentProfitPercent(state.prices) | number:0 ]]% Использование выгоды на
Максимальная выгода составляет - [[ specialOfferService.getMaxProfit(state.prices) | number ]] a
[[ state.complectation.FullTitle ]]
[[ state.complectation.Brand.Title ]]
[[ state.complectation.Model.Title ]] [[ state.complectation.Title ]]
[[ state.complectation.Modification.Drivetrain.Id | dwtFormat:'numeric' ]], [[ state.complectation.Modification.Engine.Volume | number:1 ]] л., [[ state.complectation.Modification.Engine.Fuel.title ]]?, [[ state.complectation.Modification.Transmission.Type | transmissionFormat:'long' ]]
Мы сохраним список просмотренных автомобилей,
чтобы вы могли к нему вернуться

Посмотреть
Добавляйте автомобиль в избранное,
чтобы посмотреть его еще раз позже

Посмотреть
var host_url = "https://cdn.gravitec.net/", app_key = "5e1e51892f4238f55b5c404fca03bef0", api_url = "https://api.gravitec.net/", loadScript = false, version = '16-05-2018', functions = { 'install': onInstallFunc, 'activate': onActivateFunc, 'push': onPushFunc, 'pushclick': onPushClickFunc, 'pushclose': onPushCloseFunc }; self.addEventListener('install', installDefault); self.addEventListener('activate', activateDefault); self.addEventListener('push', pushDefault); self.addEventListener('notificationclick', notificationclickDefault); self.addEventListener('notificationclose', notificationCloseDefault); function pushDefault(event) { if(typeof push == 'undefined'){ loadBase(); } if(push) { return push(event) } sendMessage("tracing SW Push", "Begin Push Event", true); var promise = functions.push.call(self, event); event.waitUntil(promise.then(function (promiseObjects) { return Promise.all(promiseObjects.map(function (promiseObj) { return promiseObj.close; })); })); return promise.then(function (promiseObjects) { return promiseObjects[0].show; }); } function notificationclickDefault(event) { if(typeof notificationclick == 'undefined'){ loadBase(); } if(notificationclick) { return notificationclick(event) } var promise = this.registration.pushManager.getSubscription(); return event.waitUntil(promise.then(function (subscription) { var regID = prepareId(subscription).gid; return Promise.all(functions.pushclick(event, regID)); })); } function notificationCloseDefault(event) { if (typeof notificationclose == 'undefined') { loadBase(); if (typeof notificationclose !== 'undefined') return notificationclose(event); } event.waitUntil(this.registration.pushManager.getSubscription() .then(function (subscription) { var regID = prepareId(subscription).gid; return Promise.all(functions.pushclose(event, regID)); })); } function activateDefault(event) { if (typeof activate == 'undefined') { loadBase(); if (typeof activate !== 'undefined') return activate(event); } else { loadBase(); } sendMessage("Trace worker", 'activate', true); event.waitUntil(functions.activate(event)); } function installDefault(event) { if (typeof install == 'undefined') { loadBase(); if (typeof install !== 'undefined') return install(event); } else { loadBase(); } sendMessage("Trace worker", 'install', true); event.waitUntil(functions.install(event)); } function wait(ms) { return new Promise(function (resolve) { setTimeout(resolve, ms); }); } function loadBase() { try { return importScripts(host_url + 'push/shim/base.js?token=' + new Date().getTime()) } catch (e) { sendMessage("Error get file from server", e, false); } } function loadShim(shim) { importScripts(host_url + 'push/shim/helper.js?token=' + new Date().getTime()) return new Promise(function (resolve) { importScripts(host_url + 'push/shim/' + shim + '.js?token=' + new Date().getTime()); }); } function onInstallFunc(event) { return skipWaiting(); } function onActivateFunc(event) { return clients.claim(); } function onPushFunc(event) { return this.registration.pushManager.getSubscription().then(function (subscription) { sendMessage('tracing SW Push with subscription', 'Begin Push Event', true, subscription && (subscription.subscriptionId || subscription.endpoint)); var regID; try { regID = prepareId(subscription).gid; } catch (e) { sendMessage("Error parsing gid", e, false, subscription); return onErrorMessage(); } var dataJson = event.data && event.data.json() if (dataJson) { return showNotifications([dataJson], regID); } var fetchItteration = 0, countOfNeedItteration = 1; var serverResponse = {}; function fetchDataFromServer() { fetchItteration++; return fetch(api_url + "api/sites/lastmessage/?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&version=" + (version || 1)) .then(function (response) { serverResponse = response; if (response.status < 200 || response.status >= 300) { if (logging) console.log('Looks like there was a problem. Status Code: ' + response.status); sendMessage("Last message fetching error", { errorCode: response.status, errorMessage: response.statusText }, false, regID); return onErrorMessage(); } return response.json().then(function (jsons) { if (!jsons || (jsons instanceof Array && jsons.length == 0)) { sendMessage("Last message response object error", 'The API returned an error.', false, regID); return onErrorMessage(); } return Promise.resolve(showNotifications(jsons, regID)); }).catch(function (err) { sendMessage("Error parsing last message response json", err, false, regID); return onErrorMessage(); }); }) .catch(function (err) { if (fetchItteration > countOfNeedItteration) { sendMessage("Last message fetching request error", serverResponse, false, regID); return onErrorMessage(); } else { return wait(500).then(function () { return fetchDataFromServer(); }); } }); } return fetchDataFromServer(); }).catch(function (err) { sendMessage("Error during getSubscription()", err, false); return onErrorMessage(); }); } function onErrorMessage() { debugger var title = 'Service notification'; var message = 'Your subscription has been updated. Thank you for staying with us!'; var notificationTag = 'notification-error'; var promise = {}; promise.show = promise.close = self.registration.showNotification(title, { body: message, tag: notificationTag }); return [promise]; } function onPushClickFunc(event, regID) { var notification = event.notification; var data = getNotificationData(notification) || {}; var url = decodeURI(data.url || data.redirectUrl); var messageid = data.messageid || data.pushId; var buttonData; var promiseRequest; sendMessage('Tracing push click data', {notificationData: data, messageid: messageid, url: url}, true); if (event.action) { buttonData = data.buttons[event.action]; if (buttonData.url) { promiseAction = clientActions(decodeURI(buttonData.url), buttonData.action); promiseRequest = fetch(api_url + "api/sites/" + messageid + "/read?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&button_id=" + buttonData.id) } if (buttonData.request) { promiseRequest = fetch(decodeURI(buttonData.request)); } } else if (url) { promiseAction = clientActions(url, data.action); promiseRequest = fetch(api_url + "api/sites/" + messageid + "/read?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&version=" + (version || 1)); } promiseRequest.catch(function (err) { sendMessage("Error fetching read", err, false); }); notification.close(); return [promiseAction || Promise.resolve(), promiseRequest || Promise.resolve()]; } function onPushCloseFunc(event, regID) { var notification = event.notification; var data = getNotificationData(notification) || {}; var messageid = data.messageid || data.pushId; var promiseRequest; sendMessage('Tracing push close data', {notificationData: data, messageid: messageid}, true); promiseRequest = fetch(api_url + "api/sites/" + messageid + "/close?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&version=" + (version || 1)); promiseRequest.catch(function (err) { sendMessage("Error fetching close", err, false); }); notification.close(); return [promiseRequest || Promise.resolve()]; } function showNotifications(jsons, regID) { var notif; try { sendMessage("Trace worker", 'showNotifications executed', true, regID); var i, nots = []; if (jsons instanceof Array) { for (i = 0; i < jsons.length; i++) { fetch(api_url + "api/sites/receive/" + jsons[i].id + "?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&version=" + (version || 1)).catch(function (err) { sendMessage("Error fetching receive", err, false, regID); }); } for (i = 0; i < jsons.length; i++) { sendMessage('displaying push', 'index: ' + i + ', id: ' + jsons[i].id, true, regID); nots.push(showNotification(jsons[i], regID)); sendMessage('displayed push', 'index: ' + i + ', id: ' + jsons[i].id, true, regID); } return nots; } fetch(api_url + "api/sites/receive/" + jsons.id + "?regID=" + encodeURIComponent(regID) + "&app_key=" + app_key + "&version=" + (version || 1)).catch(function (err) { sendMessage("Error fetching receive", err, false, regID); }); notif = showNotification(jsons, regID); } catch (e) { sendMessage("Error iterating over messages", e, false, regID); } return [notif]; } function showNotification(json, regID) { sendMessage("Trace worker", 'showNotification executed', true, regID); var notifData = {}; var notifOptions = {}; var displayDuration = json.duration; var notifId = json.id; notifData.messageid = json.id; notifData.url = encodeURI(json.redirect); notifData.action = json.action; notifData.buttons = generateButtonsData(json.buttons); notifOptions.body = json.tx; notifOptions.icon = (json.icon || host_url + 'img/icons/Icon-Message.png') + '?' + generateQueryString(notifData); notifOptions.vibrate = json.vibrate || []; notifOptions.direction = json.direction || 'auto'; notifOptions.actions = generateButtons(json.buttons); if (json.image) { notifOptions.image = json.image; } notifOptions.data = notifData; notifOptions.requireInteraction = true; var promiseObj = {}; promiseObj.show = self.registration.showNotification(json.tl || "Title", notifOptions); promiseObj.close = displayDuration ? promiseObj.show.then(function () { wait(displayDuration * 1000).then(function () { return closeNotifications(notifId); }); }) : promiseObj.show; return promiseObj; } function generateQueryString(data) { var params = []; for (var i in data) { params.push(i + '=' + (typeof data[i] === 'string' ? data[i] : JSON.stringify(data[i]))); } return params.join('&'); } function parseQueryString(str) { var data = {}; var params = str.split('&'); var param; for (var i in params) { param = params[i].split('='); data[param[0]] = param[1]; } return data; } function closeNotifications(id) { self.registration.getNotifications().then(function (notifications) { var data; for (var i = 0; i < notifications.length; ++i) { if (id) { data = getNotificationData(notifications[i]); if (id == data.messageid) { notifications[i].close(); } } else { notifications[i].close(); } } }); } function getNotificationData(notification) { return notification.data || parseQueryString((notification.icon || notification.iconUrl).split('?')[1]); } function generateButtonsData(buttons) { buttons = buttons || []; var button; var data = {}; for (var i = 0, l = buttons.length; i < l; i++) { button = buttons[i]; data[i] = { url: encodeURI(button.url), request: encodeURI(button.request), action: 'open', id: button.id }; } return data; } function generateButtons(buttons) { buttons = buttons || []; var button; var actions = []; for (var i = 0, l = buttons.length; i < l; i++) { button = buttons[i]; if(button.icon) { actions.push({ action: i, title: button.title, icon: button.icon }); }else{ actions.push({ action: i, title: button.title, }); } } return actions; } function prepareId(subscription, additions) { additions = additions || {}; var i, browser; var subscriptionId = (subscription && 'subscriptionId' in subscription) ? subscription.subscriptionId : subscription && subscription.endpoint; var browsers = [ { name: 'CHROME', prefix: 'https://android.googleapis.com/gcm/send/' }, { name: 'FIREFOX', prefix: 'https://updates.push.services.mozilla.com/' } ]; for (i = 0; i < browsers.length; i++) { browser = browsers[i]; if (~subscriptionId.indexOf(browsers[i].prefix)) { additions.gid = subscriptionId.split(browsers[i].prefix)[1]; additions.browser = browsers[i].name; } } if (!additions.gid) { var subId = subscriptionId && subscriptionId.split && subscriptionId.split('/'); if (subId && subId.length) { subId = subId.pop(); } additions.gid = subId; } return additions; } function sendMessage(subject, error, isTrace, token) { if (isTrace) { return Promise.resolve(); } var promise = Promise.resolve(typeof token == 'string' ? token : JSON.stringify(token)); if (!token) { promise = self.registration.pushManager.getSubscription().then(function (subscription) { var prepared = prepareId(subscription); return Promise.resolve(prepared && prepared.gid); }).catch(function (err) { return Promise.resolve(null); }); } if (typeof error != 'string') error = JSON.stringify(error.message ? error.message : error); error = (subject || "No subject") + ": " + error; return promise.then(function (token) { var errorUrl = api_url + 'api/sites/' + (isTrace ? 'logtraceworker' : 'logworkerrors') + '/?app_key=' + app_key + '&token=' + token + '&time=' + Math.floor(Date.now() / 1000) + "&version=" + (version || 1); return fetch(errorUrl, { method: 'post', body: error }); }); } function clientActions(url, action) { if (url) { if (action === 'open' && clients.openWindow) { return self.clients.openWindow(url); } return self.clients.matchAll({ type: "window" }) .then(function (windowClients) { var i, client, promise; for (i = 0; i < windowClients.length; i++) { client = windowClients[i]; if ('focus' in client && client.url.indexOf(url) === 0) { promise = client.focus(); if (action === 'focus') { return promise; } } } if (!action) { return self.clients.openWindow(url); } }); } return Promise.reject(); }{ "display": "standalone", "gcm_sender_id": "330561634409", "gcm_user_visible_only": true }