1 00:00:00,000 --> 00:00:01,440 2 00:00:01,440 --> 00:00:05,100 WALTER MARTIN: Hello, everyone joining us in the virtual space. 3 00:00:05,100 --> 00:00:09,270 I'm Walter, and this is a seminar on Chrome extensions. 4 00:00:09,270 --> 00:00:13,110 Chrome extensions are great, lightweight tools 5 00:00:13,110 --> 00:00:19,560 that people use to personalize, customize their web browsing 6 00:00:19,560 --> 00:00:24,780 experience, make it more efficient, make it more enjoyable. 7 00:00:24,780 --> 00:00:29,510 And they are actually easier than you might think, starting out. 8 00:00:29,510 --> 00:00:34,830 At their most basic level, they're a single manifest file 9 00:00:34,830 --> 00:00:38,160 in JavaScript Object Notation-- a JSON file. 10 00:00:38,160 --> 00:00:48,103 And there is a lot of complication that you could add here-- hold 11 00:00:48,103 --> 00:00:56,060 on-- but you don't have to. 12 00:00:56,060 --> 00:00:59,720 The only things that are actually required for a Chrome extension 13 00:00:59,720 --> 00:01:04,847 are the Manifest Version number, a name for it, and a version number. 14 00:01:04,847 --> 00:01:07,430 If that was all you had, your extension wouldn't do anything-- 15 00:01:07,430 --> 00:01:09,080 it wouldn't be very exciting. 16 00:01:09,080 --> 00:01:15,350 But you don't have to do much more than that to get something working. 17 00:01:15,350 --> 00:01:21,620 So as a very, very basic example, you've got 18 00:01:21,620 --> 00:01:32,930 a piece of code here, which just has a manifest.json 19 00:01:32,930 --> 00:01:37,827 with a name, a description, a version number, a manifest version number. 20 00:01:37,827 --> 00:01:40,160 So note, the name, the version, and the manifest number, 21 00:01:40,160 --> 00:01:43,080 are the three things that are critical. 22 00:01:43,080 --> 00:01:45,320 And we have an icon-- which is what's going 23 00:01:45,320 --> 00:01:49,530 to show up in the top right-hand corner-- the badge, the extension. 24 00:01:49,530 --> 00:01:54,290 Crest.png is just the Harvard crest-- a picture that I found on the internet. 25 00:01:54,290 --> 00:01:55,850 And there is a browser action. 26 00:01:55,850 --> 00:01:59,480 I'll talk more about that in a few minutes. 27 00:01:59,480 --> 00:02:02,150 But note that it has a pop up. 28 00:02:02,150 --> 00:02:04,710 And that's going to be an HTML page. 29 00:02:04,710 --> 00:02:08,840 They HTML page, itself, is very simple. 30 00:02:08,840 --> 00:02:11,510 It's literally just some text, which means 31 00:02:11,510 --> 00:02:15,780 it's not going to be very interesting, but it will serve as an example. 32 00:02:15,780 --> 00:02:23,630 And if we want to see that in action, we'll need to pull Chrome back up. 33 00:02:23,630 --> 00:02:31,400 And we're going to look back at our extensions page. 34 00:02:31,400 --> 00:02:34,724 You'll note, I'll un-enable these, for the moment. 35 00:02:34,724 --> 00:02:40,320 36 00:02:40,320 --> 00:02:42,320 So these are the extensions that I currently 37 00:02:42,320 --> 00:02:45,320 have installed that are non examples. 38 00:02:45,320 --> 00:02:50,060 But if we want to enable this example, you'll 39 00:02:50,060 --> 00:02:53,360 note that we've got one more popping up here, 40 00:02:53,360 --> 00:02:56,120 with the Harvard crest, as I said. 41 00:02:56,120 --> 00:03:01,190 And if we click on that, we should see that HTML page. 42 00:03:01,190 --> 00:03:03,020 Note, it's not very pretty. 43 00:03:03,020 --> 00:03:03,950 It's very plain. 44 00:03:03,950 --> 00:03:05,690 It's not formatted well. 45 00:03:05,690 --> 00:03:09,320 But you could fix that yourself with some CSS, and some more complicated 46 00:03:09,320 --> 00:03:10,730 HTML. 47 00:03:10,730 --> 00:03:14,990 But that's a working Chrome extension, and it was maybe 48 00:03:14,990 --> 00:03:16,746 15 lines of code, at most. 49 00:03:16,746 --> 00:03:19,760 50 00:03:19,760 --> 00:03:24,630 Now, for more information about a manifest file, 51 00:03:24,630 --> 00:03:29,720 this URL, which will also be in the slides, has a full listing of things. 52 00:03:29,720 --> 00:03:33,650 And you'll notice you can click on most of these different fields 53 00:03:33,650 --> 00:03:36,252 to learn more about them. 54 00:03:36,252 --> 00:03:37,460 There's a lot of stuff there. 55 00:03:37,460 --> 00:03:40,460 There's a lot of functionality that you could take advantage of, 56 00:03:40,460 --> 00:03:44,690 but you probably don't want to, or need to. 57 00:03:44,690 --> 00:03:47,990 But there will be something to accomplish just 58 00:03:47,990 --> 00:03:51,824 about anything you could want, within the context of this manifest file. 59 00:03:51,824 --> 00:03:55,560 60 00:03:55,560 --> 00:03:59,927 So we've now got a couple of different ways 61 00:03:59,927 --> 00:04:01,760 to actually implement your Chrome extension, 62 00:04:01,760 --> 00:04:04,970 depending on what you wanted to do. 63 00:04:04,970 --> 00:04:09,830 So the first of these is a browser action, 64 00:04:09,830 --> 00:04:24,800 and that was what we saw in that other example, where we had the pop up. 65 00:04:24,800 --> 00:04:27,200 Browser action-- the goal of a browser action 66 00:04:27,200 --> 00:04:32,520 is to have some action available any time, 67 00:04:32,520 --> 00:04:37,040 regardless of what web page you're on, anytime you say click on the badge, 68 00:04:37,040 --> 00:04:40,460 up at the top, or maybe, anytime you type something specific 69 00:04:40,460 --> 00:04:42,810 into the Chrome search bar. 70 00:04:42,810 --> 00:04:47,960 They're going to be around all the time. 71 00:04:47,960 --> 00:04:52,520 That might not be what we're looking for in a Chrome extension. 72 00:04:52,520 --> 00:04:54,770 Maybe we want something that specifically interacts 73 00:04:54,770 --> 00:04:57,530 with Facebook in a specific way. 74 00:04:57,530 --> 00:05:01,040 And in that case, a page action makes much more sense, 75 00:05:01,040 --> 00:05:04,730 because its functionality will be localized to one, or two, or three 76 00:05:04,730 --> 00:05:05,990 pages. 77 00:05:05,990 --> 00:05:11,960 It only needs to run when those pages are currently loaded, 78 00:05:11,960 --> 00:05:16,170 which allows us to save processing resources. 79 00:05:16,170 --> 00:05:17,420 It'll look slightly different. 80 00:05:17,420 --> 00:05:21,800 It won't have the same badge, but it will 81 00:05:21,800 --> 00:05:28,630 be able to have the same functionality in terms of when you click on it. 82 00:05:28,630 --> 00:05:32,020 You'll be able to affect things the same way that you would 83 00:05:32,020 --> 00:05:35,710 with a browser action, just only for specific pages. 84 00:05:35,710 --> 00:05:40,999 A third idea to be aware of-- it's not in the same category as a browser 85 00:05:40,999 --> 00:05:42,040 action, or a page action. 86 00:05:42,040 --> 00:05:45,280 Either one of those can have a background script, 87 00:05:45,280 --> 00:05:48,920 but a background script is a JavaScript file. 88 00:05:48,920 --> 00:05:55,060 And remember, JavaScript, we're using primarily to affect the DOM. 89 00:05:55,060 --> 00:05:59,260 It will be running all the time, in the background, as the name suggests. 90 00:05:59,260 --> 00:06:05,710 So if there is some functionality, say, maybe you're 91 00:06:05,710 --> 00:06:09,640 creating a Chrome extension for an email account, 92 00:06:09,640 --> 00:06:12,940 and you want a notification any time an e-mail comes in, 93 00:06:12,940 --> 00:06:15,220 that script is going to need to run all the time, 94 00:06:15,220 --> 00:06:17,330 because an e-mail could come in at any time. 95 00:06:17,330 --> 00:06:21,190 So background script would be the right choice there. 96 00:06:21,190 --> 00:06:23,170 You can also create background pages. 97 00:06:23,170 --> 00:06:26,080 Sometimes, in terms of structuring your application, 98 00:06:26,080 --> 00:06:31,060 it might make more sense to have an HTML page where the JavaScript is being run. 99 00:06:31,060 --> 00:06:36,530 But the main thing you focus on is the scripts-- the JavaScript scripts. 100 00:06:36,530 --> 00:06:40,420 Additionally, event pages, and event scripts, 101 00:06:40,420 --> 00:06:42,610 are similar to background scripts. 102 00:06:42,610 --> 00:06:46,240 They can run all the time in the background, 103 00:06:46,240 --> 00:06:49,510 but they wait until a specific event has happened, which 104 00:06:49,510 --> 00:06:51,610 makes them a little bit less wasteful. 105 00:06:51,610 --> 00:06:54,070 So this is what Chrome is asking people to do 106 00:06:54,070 --> 00:06:57,130 these days, unless there's something that 107 00:06:57,130 --> 00:07:00,934 really should be running all the time. 108 00:07:00,934 --> 00:07:07,010 Now, additionally, content scripts are something else. 109 00:07:07,010 --> 00:07:08,840 Certainly, if you have a background script, 110 00:07:08,840 --> 00:07:10,298 you can also have a content script. 111 00:07:10,298 --> 00:07:15,520 But they're sort of ideas in opposition, because they're 112 00:07:15,520 --> 00:07:18,010 running very much in the foreground. 113 00:07:18,010 --> 00:07:20,080 They are directly interacting with the pages 114 00:07:20,080 --> 00:07:23,830 that you, as a user of the extension, are viewing-- really 115 00:07:23,830 --> 00:07:25,900 changing the DOM directly. 116 00:07:25,900 --> 00:07:30,490 And if you have an application that has both, 117 00:07:30,490 --> 00:07:33,400 they can communicate through message passing. 118 00:07:33,400 --> 00:07:35,640 This is something that Chrome has constructed. 119 00:07:35,640 --> 00:07:37,360 That's a more advanced topic. 120 00:07:37,360 --> 00:07:41,210 I'd suggest you check out the documentation for that. 121 00:07:41,210 --> 00:07:44,760 But just know that it does exist. 122 00:07:44,760 --> 00:07:48,350 And then, content scripts, we have an example of. 123 00:07:48,350 --> 00:07:54,040 So remember, we said that content scripts were good at changing the DOM. 124 00:07:54,040 --> 00:07:55,940 Pull that up. 125 00:07:55,940 --> 00:07:58,780 126 00:07:58,780 --> 00:08:00,127 That's not quite the right one. 127 00:08:00,127 --> 00:08:03,600 128 00:08:03,600 --> 00:08:05,790 We've got another manifest. 129 00:08:05,790 --> 00:08:11,090 Same kind of deal-- name, version, description. 130 00:08:11,090 --> 00:08:14,430 But we also have this content scripts tag. 131 00:08:14,430 --> 00:08:20,550 And I should actually tab this over, for good style. 132 00:08:20,550 --> 00:08:24,220 But we have this content scripts field, here, 133 00:08:24,220 --> 00:08:26,630 which has several parts inside of it. 134 00:08:26,630 --> 00:08:30,150 And note, also, that we have square brackets here. 135 00:08:30,150 --> 00:08:33,450 So content scripts implies there can be more than one. 136 00:08:33,450 --> 00:08:37,940 And within this single script that I'm running, it has more fields. 137 00:08:37,940 --> 00:08:42,750 So matches is telling us which you URLs this content script should run on. 138 00:08:42,750 --> 00:08:45,740 Here, it's just saying anything. 139 00:08:45,740 --> 00:08:49,320 JavaScript-- the JS-- that's the script that's going to be run, 140 00:08:49,320 --> 00:08:51,580 and we'll take a look at that in a second. 141 00:08:51,580 --> 00:08:54,930 And then, "run at" is saying when these scripts should actually be run. 142 00:08:54,930 --> 00:08:58,530 And here, we're choosing to run the document end, which is to say, 143 00:08:58,530 --> 00:09:01,176 when the document is fully loaded. 144 00:09:01,176 --> 00:09:05,520 So if we look at this content.js file, it's 145 00:09:05,520 --> 00:09:08,430 not important that you understand everything that's going on here. 146 00:09:08,430 --> 00:09:12,000 But essentially, we're pulling out all of the elements of the DOM. 147 00:09:12,000 --> 00:09:14,430 We're iterating through each of them. 148 00:09:14,430 --> 00:09:18,600 And when we see the word psychology, we replace it with applied biology. 149 00:09:18,600 --> 00:09:23,040 When we see biology, we replace it with applied chemistry. 150 00:09:23,040 --> 00:09:28,050 You could, if you wanted to, substitute in plenty of other words here. 151 00:09:28,050 --> 00:09:32,490 It's just a simple model for how you could use a content script. 152 00:09:32,490 --> 00:09:39,030 And to see that in action-- no, that's not quite what we want. 153 00:09:39,030 --> 00:09:42,840 So remember, I said, psychology will be changed to applied biology. 154 00:09:42,840 --> 00:09:49,170 And we're going to enable that extension, word replacer, 155 00:09:49,170 --> 00:09:52,110 in this new tab. 156 00:09:52,110 --> 00:09:58,320 We're going to go to the psychology page. 157 00:09:58,320 --> 00:10:02,700 And you'll note, it got changed, after the page was fully loaded, 158 00:10:02,700 --> 00:10:03,750 to applied biology. 159 00:10:03,750 --> 00:10:07,620 And we'll see that it ended up getting changed everywhere here. 160 00:10:07,620 --> 00:10:09,180 Now, we have applied applied biology. 161 00:10:09,180 --> 00:10:13,070 162 00:10:13,070 --> 00:10:17,780 So that's content scripts. 163 00:10:17,780 --> 00:10:22,490 Page override is another cool piece of functionality that Chrome gives you. 164 00:10:22,490 --> 00:10:24,740 Chrome has a few default pages-- the one that 165 00:10:24,740 --> 00:10:30,020 handles your history, your bookmarks manager, and the new tab 166 00:10:30,020 --> 00:10:31,450 page that comes up. 167 00:10:31,450 --> 00:10:37,130 And a Chrome extension can override one of these with it's own HTML pages, 168 00:10:37,130 --> 00:10:42,320 adding some functionality, or anything else you find interesting. 169 00:10:42,320 --> 00:10:50,000 So I've created a simple example here, which just replaces your background-- 170 00:10:50,000 --> 00:10:57,440 the background of a new tab page-- with some additional nice pictures. 171 00:10:57,440 --> 00:11:00,819 Again, this manifest looks awfully similar to what 172 00:11:00,819 --> 00:11:01,860 we've been seeing before. 173 00:11:01,860 --> 00:11:05,300 That's because you have to have the same default fields every time. 174 00:11:05,300 --> 00:11:06,440 I'm using the same icon. 175 00:11:06,440 --> 00:11:08,080 That could be changed. 176 00:11:08,080 --> 00:11:11,960 But note the new field here-- Chrome URL overrides. 177 00:11:11,960 --> 00:11:14,270 So that field is saying, we're going to have 178 00:11:14,270 --> 00:11:16,280 an override page in this extension. 179 00:11:16,280 --> 00:11:17,270 Which one? 180 00:11:17,270 --> 00:11:18,560 New tab. 181 00:11:18,560 --> 00:11:21,910 And we're going to overwrite it with menu.html. 182 00:11:21,910 --> 00:11:24,187 Menu.html is a very simple file. 183 00:11:24,187 --> 00:11:27,170 184 00:11:27,170 --> 00:11:31,790 I've just listed some things that you could do in the new tab space, 185 00:11:31,790 --> 00:11:34,040 instead of the picture that I'm including. 186 00:11:34,040 --> 00:11:37,070 But then, it also loads in a CSS file. 187 00:11:37,070 --> 00:11:43,710 And that CSS file will load into the body-- 188 00:11:43,710 --> 00:11:47,630 the background of the body-- this background.jpg, which 189 00:11:47,630 --> 00:11:49,790 I've also pulled from the internet. 190 00:11:49,790 --> 00:11:51,770 And then, just does a little bit of formatting 191 00:11:51,770 --> 00:11:54,920 to make the text that I've put there look nicer. 192 00:11:54,920 --> 00:12:03,291 So if we go back to our extension page, and enable that one, pretty pictures. 193 00:12:03,291 --> 00:12:07,450 194 00:12:07,450 --> 00:12:11,150 So note, again, something, we had the crest pop up here, 195 00:12:11,150 --> 00:12:12,230 but I can't click on it. 196 00:12:12,230 --> 00:12:15,840 I didn't have a page action, or a browser action here. 197 00:12:15,840 --> 00:12:17,510 So clicking on it wouldn't do anything. 198 00:12:17,510 --> 00:12:19,680 Chrome grays it out, automatically. 199 00:12:19,680 --> 00:12:23,810 But if I go over and create a new tab, we 200 00:12:23,810 --> 00:12:28,400 have a beautiful picture that is obviously not the default page 201 00:12:28,400 --> 00:12:31,190 that we would see here. 202 00:12:31,190 --> 00:12:36,020 So just another idea of things you could do. 203 00:12:36,020 --> 00:12:39,680 For additional functionality-- and this is where Chrome extensions really 204 00:12:39,680 --> 00:12:40,970 start to gain power. 205 00:12:40,970 --> 00:12:44,540 Most of the things that I just showed don't have much substance to them. 206 00:12:44,540 --> 00:12:48,080 But if you want to really start affecting the way that Chrome works, 207 00:12:48,080 --> 00:12:55,190 and changing the browser, Chrome offers a vast selection of APIs 208 00:12:55,190 --> 00:12:56,960 that will allow you to make these changes, 209 00:12:56,960 --> 00:13:00,590 whether it's to windows, or tabs. 210 00:13:00,590 --> 00:13:05,030 You can open, close, search through, manipulate those things, 211 00:13:05,030 --> 00:13:11,300 or changing things in the omnibox which is the search box that Chrome provides. 212 00:13:11,300 --> 00:13:14,450 Chrome storage is really useful for storing 213 00:13:14,450 --> 00:13:19,580 user preferences, which can be really handy notifications, 214 00:13:19,580 --> 00:13:23,300 will allow you to send users notifications, in their desktop, 215 00:13:23,300 --> 00:13:24,470 from Chrome. 216 00:13:24,470 --> 00:13:28,520 So there's a lot of really cool stuff in there. 217 00:13:28,520 --> 00:13:32,480 We can't go through all of it, because there's just too much. 218 00:13:32,480 --> 00:13:36,170 But there is a listing of this in Chrome's documentation, 219 00:13:36,170 --> 00:13:39,750 under API index. 220 00:13:39,750 --> 00:13:45,650 One thing to note is that, also, to do some of these things, 221 00:13:45,650 --> 00:13:52,280 you're going to need to ask for which URLs users have open. 222 00:13:52,280 --> 00:13:57,590 Because that's a privacy risk for Google-- and for your extension, 223 00:13:57,590 --> 00:13:59,360 I suppose. 224 00:13:59,360 --> 00:14:04,340 You have to get explicit permission from a user to be able to do that. 225 00:14:04,340 --> 00:14:08,120 That's actually very easy, though, because, in the manifest, 226 00:14:08,120 --> 00:14:11,060 there is a permissions field in which you just specify 227 00:14:11,060 --> 00:14:13,160 the list of permissions that you want. 228 00:14:13,160 --> 00:14:16,520 And it'll prompt users to accept those permissions 229 00:14:16,520 --> 00:14:18,040 when they download the application. 230 00:14:18,040 --> 00:14:20,510 So that's handled for you. 231 00:14:20,510 --> 00:14:23,720 Finally, I mentioned something about a user preferences earlier. 232 00:14:23,720 --> 00:14:29,810 One nice thing that Chrome offers is an already partially set up options page. 233 00:14:29,810 --> 00:14:33,350 Again, you create your own HTML files here. 234 00:14:33,350 --> 00:14:39,090 You can link them up to the rest of your extension with basic JavaScript. 235 00:14:39,090 --> 00:14:43,730 And the options_ui, especially, will create a nice overlay 236 00:14:43,730 --> 00:14:48,270 to the Extensions page, allowing you to change the options as a user. 237 00:14:48,270 --> 00:14:51,770 238 00:14:51,770 --> 00:14:58,886 So Chrome extensions, overall, are a very powerful tool. 239 00:14:58,886 --> 00:15:00,408 I'll just go back to the start. 240 00:15:00,408 --> 00:15:03,050 241 00:15:03,050 --> 00:15:07,730 Very powerful, but at the same time lightweight tool. 242 00:15:07,730 --> 00:15:09,270 And keep that in mind. 243 00:15:09,270 --> 00:15:13,010 Now, most people, when they're looking to install a Chrome extension, 244 00:15:13,010 --> 00:15:15,982 don't want another full application. 245 00:15:15,982 --> 00:15:17,690 The whole idea is that it's an extension. 246 00:15:17,690 --> 00:15:22,100 So while it might have a lot of functionality, 247 00:15:22,100 --> 00:15:25,965 it shouldn't be a hog of memory processing time. 248 00:15:25,965 --> 00:15:28,340 And maybe it shouldn't even have that much functionality. 249 00:15:28,340 --> 00:15:31,790 Maybe one or two things is a good amount of stuff 250 00:15:31,790 --> 00:15:35,410 to encapsulate into one Chrome extension. 251 00:15:35,410 --> 00:15:39,850 And if you have more ideas, maybe make several. 252 00:15:39,850 --> 00:15:40,610 Let's see. 253 00:15:40,610 --> 00:15:42,674 Do we have any questions? 254 00:15:42,674 --> 00:15:44,990 AUDIENCE: Can you speak to the publishing a little bit? 255 00:15:44,990 --> 00:15:45,823 WALTER MARTIN: Yeah. 256 00:15:45,823 --> 00:15:47,720 AUDIENCE: [INAUDIBLE] 257 00:15:47,720 --> 00:15:51,770 WALTER MARTIN: So publishing is super important. 258 00:15:51,770 --> 00:15:57,200 Obviously, I haven't mentioned yet how you run your own Chrome extensions. 259 00:15:57,200 --> 00:15:59,939 So I'll need to pull this over again. 260 00:15:59,939 --> 00:16:08,440 261 00:16:08,440 --> 00:16:08,940 Right. 262 00:16:08,940 --> 00:16:18,290 So you can have your files with the Chrome extensions on your own machine. 263 00:16:18,290 --> 00:16:20,630 If you go to the Extensions page-- the URL 264 00:16:20,630 --> 00:16:25,790 up there-- if you check the developer mode box, 265 00:16:25,790 --> 00:16:30,500 you will get this load unpack extension button, which 266 00:16:30,500 --> 00:16:33,650 brings up a window if I click on it. 267 00:16:33,650 --> 00:16:39,200 And this is where I've stored my Chrome extensions. 268 00:16:39,200 --> 00:16:44,720 So if I wanted to load one of these, you'll note, 269 00:16:44,720 --> 00:16:50,140 if you look back in the video at where the manifest file was stored, 270 00:16:50,140 --> 00:16:52,340 it's at the top level of each of these folders. 271 00:16:52,340 --> 00:16:56,240 That's how Chrome knows that it's a Chrome extension, that it's loading in. 272 00:16:56,240 --> 00:17:00,620 But I can just open one of these, hit OK, 273 00:17:00,620 --> 00:17:04,550 and it will load a local copy of the extension for me. 274 00:17:04,550 --> 00:17:10,040 So if you wanted to share it with a few friends, you could take those files, 275 00:17:10,040 --> 00:17:14,280 turn them into a zip, send it through email, or Facebook. 276 00:17:14,280 --> 00:17:17,359 And then, they could unzip it, and upload it in the same way, and use it. 277 00:17:17,359 --> 00:17:25,140 So currently, I'm I've been enjoying this new tab picture functionality. 278 00:17:25,140 --> 00:17:27,140 So I'm going to keep using it locally, probably. 279 00:17:27,140 --> 00:17:31,104 But if you wanted people, beyond those who have communication with you, 280 00:17:31,104 --> 00:17:33,020 to be able to use your extension, you're going 281 00:17:33,020 --> 00:17:45,500 to need to bring it to the Chrome Web Store, which is designed to do this. 282 00:17:45,500 --> 00:17:49,500 And you're going to go through the Developer Dashboard. 283 00:17:49,500 --> 00:17:52,010 Of course, you'll need to have a Google account for this. 284 00:17:52,010 --> 00:17:55,190 I'm not actually going to sign in right now, 285 00:17:55,190 --> 00:18:00,080 but it allows you to upload extensions. 286 00:18:00,080 --> 00:18:03,140 And then, after paying a fee of $5, I think, 287 00:18:03,140 --> 00:18:06,710 to have your account activated for publishing to the web store, 288 00:18:06,710 --> 00:18:09,740 you can upload things, and other people will be able to search for them 289 00:18:09,740 --> 00:18:15,380 and download them, themselves, which is pretty powerful. 290 00:18:15,380 --> 00:18:18,706 Extensions get vetted for viruses and such. 291 00:18:18,706 --> 00:18:21,460 292 00:18:21,460 --> 00:18:26,600 So I guess, don't try to pull anything, because Google is always watching. 293 00:18:26,600 --> 00:18:30,830 But you should be able to get that published, I 294 00:18:30,830 --> 00:18:36,220 think, pretty easily, once you've gotten past that first step. 295 00:18:36,220 --> 00:18:38,640 I think that's all I have for now. 296 00:18:38,640 --> 00:18:40,480 Thank you for watching. 297 00:18:40,480 --> 00:18:43,287