Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: composer.postload.js

Issue 29452181: Noissue - Merge current tip to Edge bookmark (Closed)
Patch Set: Created May 30, 2017, 3:49 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « composer.js ('k') | dependencies » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2016 Eyeo GmbH 3 * Copyright (C) 2006-2017 eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 /* globals checkCollapse, elemhide, getURLsFromElement, typeMap */
19
18 "use strict"; 20 "use strict";
19 21
20 // The page ID for the popup filter selection dialog (top frame only). 22 // The page ID for the popup filter selection dialog (top frame only).
21 let blockelementPopupId = null; 23 let blockelementPopupId = null;
22 24
23 // Element picking state (top frame only). 25 // Element picking state (top frame only).
24 let currentlyPickingElement = false; 26 let currentlyPickingElement = false;
25 let lastMouseOverEvent = null; 27 let lastMouseOverEvent = null;
26 28
27 // During element picking this is the currently highlighted element. When 29 // During element picking this is the currently highlighted element. When
28 // element has been picked this is the element that is due to be blocked. 30 // element has been picked this is the element that is due to be blocked.
29 let currentElement = null; 31 let currentElement = null;
30 32
31 // Highlighting state, used by the top frame during element picking and all 33 // Highlighting state, used by the top frame during element picking and all
32 // frames when the chosen element is highlighted red. 34 // frames when the chosen element is highlighted red.
33 let highlightedElementsSelector = null; 35 let highlightedElementsSelector = null;
34 let highlightedElementsInterval = null; 36 let highlightedElementsInterval = null;
35 37
36 // Last right click state stored for element blocking via the context menu. 38 // Last right click state stored for element blocking via the context menu.
37 let lastRightClickEvent = null; 39 let lastRightClickEvent = null;
38 let lastRightClickEventIsMostRecent = false; 40 let lastRightClickEventIsMostRecent = false;
39 41
40 42
41 /* Utilities */ 43 /* Utilities */
42 44
43 function getFiltersForElement(element, callback) 45 function getFiltersForElement(element, callback)
44 { 46 {
45 let src = element.getAttribute("src"); 47 let src = element.getAttribute("src");
46 ext.backgroundPage.sendMessage( 48 ext.backgroundPage.sendMessage({
47 {
48 type: "composer.getFilters", 49 type: "composer.getFilters",
49 tagName: element.localName, 50 tagName: element.localName,
50 id: element.id, 51 id: element.id,
51 src: src && src.length <= 1000 ? src : null, 52 src: src && src.length <= 1000 ? src : null,
52 style: element.getAttribute("style"), 53 style: element.getAttribute("style"),
53 classes: Array.prototype.slice.call(element.classList), 54 classes: Array.prototype.slice.call(element.classList),
54 urls: getURLsFromElement(element), 55 urls: getURLsFromElement(element),
55 mediatype: typeMap[element.localName], 56 mediatype: typeMap.get(element.localName),
56 baseURL: document.location.href 57 baseURL: document.location.href
57 }, 58 },
58 response => 59 response =>
59 { 60 {
60 callback(response.filters, response.selectors); 61 callback(response.filters, response.selectors);
61 }); 62 });
62 } 63 }
63 64
64 function getBlockableElementOrAncestor(element, callback) 65 function getBlockableElementOrAncestor(element, callback)
65 { 66 {
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 { 382 {
382 if (!currentElement) 383 if (!currentElement)
383 return; 384 return;
384 385
385 let element = currentElement.prisoner || currentElement; 386 let element = currentElement.prisoner || currentElement;
386 getFiltersForElement(element, (filters, selectors) => 387 getFiltersForElement(element, (filters, selectors) =>
387 { 388 {
388 if (currentlyPickingElement) 389 if (currentlyPickingElement)
389 stopPickingElement(); 390 stopPickingElement();
390 391
391 ext.backgroundPage.sendMessage( 392 ext.backgroundPage.sendMessage({
392 {
393 type: "composer.openDialog" 393 type: "composer.openDialog"
394 }, 394 },
395 popupId => 395 popupId =>
396 { 396 {
397 ext.backgroundPage.sendMessage( 397 ext.backgroundPage.sendMessage({
398 {
399 type: "forward", 398 type: "forward",
400 targetPageId: popupId, 399 targetPageId: popupId,
401 payload: 400 payload: {type: "composer.dialog.init", filters}
402 {
403 type: "composer.dialog.init",
404 filters: filters
405 }
406 }); 401 });
407 402
408 // Only the top frame keeps a record of the popup window's ID, 403 // Only the top frame keeps a record of the popup window's ID,
409 // so if this isn't the top frame we need to pass the ID on. 404 // so if this isn't the top frame we need to pass the ID on.
410 if (window == window.top) 405 if (window == window.top)
411 { 406 {
412 blockelementPopupId = popupId; 407 blockelementPopupId = popupId;
413 } 408 }
414 else 409 else
415 { 410 {
416 ext.backgroundPage.sendMessage( 411 ext.backgroundPage.sendMessage({
417 {
418 type: "forward", 412 type: "forward",
419 payload: 413 payload: {type: "composer.content.dialogOpened", popupId}
420 {
421 type: "composer.content.dialogOpened",
422 popupId: popupId
423 }
424 }); 414 });
425 } 415 }
426 }); 416 });
427 417
428 if (selectors.length > 0) 418 if (selectors.length > 0)
429 highlightElements(selectors.join(",")); 419 highlightElements(selectors.join(","));
430 420
431 highlightElement(currentElement, "#fd1708", "#f6a1b5"); 421 highlightElement(currentElement, "#fd1708", "#f6a1b5");
432 }); 422 });
433 423
(...skipping 20 matching lines...) Expand all
454 /* Core logic */ 444 /* Core logic */
455 445
456 // We're done with the block element feature for now, tidy everything up. 446 // We're done with the block element feature for now, tidy everything up.
457 function deactivateBlockElement() 447 function deactivateBlockElement()
458 { 448 {
459 if (currentlyPickingElement) 449 if (currentlyPickingElement)
460 stopPickingElement(); 450 stopPickingElement();
461 451
462 if (blockelementPopupId != null) 452 if (blockelementPopupId != null)
463 { 453 {
464 ext.backgroundPage.sendMessage( 454 ext.backgroundPage.sendMessage({
465 {
466 type: "forward", 455 type: "forward",
467 targetPageId: blockelementPopupId, 456 targetPageId: blockelementPopupId,
468 payload: 457 payload:
469 { 458 {
470 type: "composer.dialog.close" 459 type: "composer.dialog.close"
471 } 460 }
472 }); 461 });
473 462
474 blockelementPopupId = null; 463 blockelementPopupId = null;
475 } 464 }
(...skipping 21 matching lines...) Expand all
497 // this because the contextMenu API only provides a URL, not the actual DOM 486 // this because the contextMenu API only provides a URL, not the actual DOM
498 // element. 487 // element.
499 // We also need to make sure that the previous right click event, 488 // We also need to make sure that the previous right click event,
500 // if there is one, is removed. We don't know which frame it is in so we must 489 // if there is one, is removed. We don't know which frame it is in so we must
501 // send a message to the other frames to clear their old right click events. 490 // send a message to the other frames to clear their old right click events.
502 document.addEventListener("contextmenu", event => 491 document.addEventListener("contextmenu", event =>
503 { 492 {
504 lastRightClickEvent = event; 493 lastRightClickEvent = event;
505 lastRightClickEventIsMostRecent = true; 494 lastRightClickEventIsMostRecent = true;
506 495
507 ext.backgroundPage.sendMessage( 496 ext.backgroundPage.sendMessage({
508 {
509 type: "forward", 497 type: "forward",
510 payload: 498 payload:
511 { 499 {
512 type: "composer.content.clearPreviousRightClickEvent" 500 type: "composer.content.clearPreviousRightClickEvent"
513 } 501 }
514 }); 502 });
515 }, true); 503 }, true);
516 504
517 ext.onMessage.addListener((msg, sender, sendResponse) => 505 ext.onMessage.addListener((msg, sender, sendResponse) =>
518 { 506 {
519 switch (msg.type) 507 switch (msg.type)
520 { 508 {
521 case "composer.content.getState": 509 case "composer.content.getState":
522 if (window == window.top) 510 if (window == window.top)
511 {
523 sendResponse({ 512 sendResponse({
524 active: currentlyPickingElement || blockelementPopupId != null 513 active: currentlyPickingElement || blockelementPopupId != null
525 }); 514 });
515 }
526 break; 516 break;
527 case "composer.content.startPickingElement": 517 case "composer.content.startPickingElement":
528 if (window == window.top) 518 if (window == window.top)
529 startPickingElement(); 519 startPickingElement();
530 break; 520 break;
531 case "composer.content.contextMenuClicked": 521 case "composer.content.contextMenuClicked":
532 let event = lastRightClickEvent; 522 let event = lastRightClickEvent;
533 deactivateBlockElement(); 523 deactivateBlockElement();
534 if (event) 524 if (event)
535 { 525 {
(...skipping 29 matching lines...) Expand all
565 break; 555 break;
566 case "composer.content.dialogOpened": 556 case "composer.content.dialogOpened":
567 if (window == window.top) 557 if (window == window.top)
568 blockelementPopupId = msg.popupId; 558 blockelementPopupId = msg.popupId;
569 break; 559 break;
570 case "composer.content.dialogClosed": 560 case "composer.content.dialogClosed":
571 // The onRemoved hook for the popup can create a race condition, so we 561 // The onRemoved hook for the popup can create a race condition, so we
572 // to be careful here. (This is not perfect, but best we can do.) 562 // to be careful here. (This is not perfect, but best we can do.)
573 if (window == window.top && blockelementPopupId == msg.popupId) 563 if (window == window.top && blockelementPopupId == msg.popupId)
574 { 564 {
575 ext.backgroundPage.sendMessage( 565 ext.backgroundPage.sendMessage({
576 {
577 type: "forward", 566 type: "forward",
578 payload: 567 payload:
579 { 568 {
580 type: "composer.content.finished" 569 type: "composer.content.finished"
581 } 570 }
582 }); 571 });
583 } 572 }
584 break; 573 break;
585 } 574 }
586 }); 575 });
587 576
588 if (window == window.top) 577 if (window == window.top)
589 ext.backgroundPage.sendMessage({type: "composer.ready"}); 578 ext.backgroundPage.sendMessage({type: "composer.ready"});
590 } 579 }
OLDNEW
« no previous file with comments | « composer.js ('k') | dependencies » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld