1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Sample extension to replace all JPEG images (but no PNG/GIF/... images) with 6// lolcat images from http://icanhascheezburger.com/ - except for images on 7// Google. 8 9var RequestMatcher = chrome.declarativeWebRequest.RequestMatcher; 10var IgnoreRules = chrome.declarativeWebRequest.IgnoreRules; 11var RedirectRequest = chrome.declarativeWebRequest.RedirectRequest; 12 13var catImageUrl = 14 'https://i.chzbgr.com/completestore/12/8/23/S__rxG9hIUK4sNuMdTIY9w2.jpg'; 15 16// Registers redirect rules assuming that currently no rules are registered by 17// this extension, yet. 18function registerRules() { 19 var redirectRule = { 20 priority: 100, 21 conditions: [ 22 // If any of these conditions is fulfilled, the actions are executed. 23 new RequestMatcher({ 24 // Both, the url and the resourceType must match. 25 url: {pathSuffix: '.jpg'}, 26 resourceType: ['image'] 27 }), 28 new RequestMatcher({ 29 url: {pathSuffix: '.jpeg'}, 30 resourceType: ['image'] 31 }), 32 ], 33 actions: [ 34 new RedirectRequest({redirectUrl: catImageUrl}) 35 ] 36 }; 37 38 var exceptionRule = { 39 priority: 1000, 40 conditions: [ 41 // We use hostContains to compensate for various top-level domains. 42 new RequestMatcher({url: {hostContains: '.google.'}}) 43 ], 44 actions: [ 45 new IgnoreRules({lowerPriorityThan: 1000}) 46 ] 47 }; 48 49 var callback = function() { 50 if (chrome.runtime.lastError) { 51 console.error('Error adding rules: ' + chrome.runtime.lastError); 52 } else { 53 console.info('Rules successfully installed'); 54 chrome.declarativeWebRequest.onRequest.getRules(null, 55 function(rules) { 56 console.info('Now the following rules are registered: ' + 57 JSON.stringify(rules, null, 2)); 58 }); 59 } 60 }; 61 62 chrome.declarativeWebRequest.onRequest.addRules( 63 [redirectRule, exceptionRule], callback); 64} 65 66function setup() { 67 // This function is also called when the extension has been updated. Because 68 // registered rules are persisted beyond browser restarts, we remove 69 // previously registered rules before registering new ones. 70 chrome.declarativeWebRequest.onRequest.removeRules( 71 null, 72 function() { 73 if (chrome.runtime.lastError) { 74 console.error('Error clearing rules: ' + chrome.runtime.lastError); 75 } else { 76 registerRules(); 77 } 78 }); 79} 80 81// This is triggered when the extension is installed or updated. 82chrome.runtime.onInstalled.addListener(setup); 83