Plug-in Architectures Presented by Truc Nguyen What’s a plug-in? “a type of program that tightly integrates with a larger application to add a special capability to it” - CNET “a set of software components that adds specific abilities to a larger software application” - Wikipedia What’s a plug-in? • Component architectures • Semantics – Plug-ins – Extensions – Add-ons Plug-ins • Not hard-coded into host app – Unknown at compile time • Not a standalone application • One step further: compose an entire application out of plugins Why do have plug-ins? • • • • Extensible Modular Customizable Keep It Small and Simple! Traditional vs Pure Traditional Plug-in • Extend capabilities of base application • Not compiled into the application Pure Plug-in • Everything is a plug-in • Plug-ins extend other plug-ins • Where does that leave the base application? – A run-time engine for plug-ins – Plug-ins become hosts to other plug-ins by providing extension points • How do plug-ins play nicely with each other? – Abide by the framework’s or each other’s Pure Plug-in Engine • Keeping track of where the right plug-in code is and running it • Maintain a registry of plug-ins and functions that go with each • Manage extension model and dependencies between plug-ins Plug-in Design Patterns • Best practice solutions to solve a design problem • How to support dynamic loading of modules unknown during compilation Plug-in Pattern Eclipse • Well known as a Java IDE • Pure plug-in architecture – Runtime engine itself is a bunch of core plugins except for tiny bootstrap code • Universal plug-in architecture for creating “anything, but nothing in particular” • Each plug-in has a manifest Eclipse Gecko (NPAPI) • Netscape Plugin Application Programming Interface • Plug-in is completely controlled by web page that calls it • On start, Gecko looks for plug-in modules in a specified locations on the system • On a page with certain embedded media, checks for plug-in with matching MIME type creates new instance and runs it Photoshop • Central Plug-in loader – Scans PiPL (Plug-in Property List) • Fixed types – filter, import, export, file format, automation – selection and parser (not implemented by 3rd party) • Non-Photoshop applications can support Photoshop plug-ins Chrome • Scripting API vs Browser API • Extensions can modify the DOM • Can have access to the history, current tabs, bookmarks, etc • Composed of files, can be packaged as .crx – manifest.json – HTML files – JavaScript – Other resources (e.g CSS, images) Chrome • Background pages – Persistent or event • Content scripts are JS that executes in the context of the page just loaded – Can change the DOM on the current page – Can’t change the DOM on the background page of parent extension • Callbacks execute on a user action Challenges • Installing and updating – Configuration plugin • Security • Concurrent plug-in version – Eclipse convention: Only plug-ins that contribute code libraries can coexist • Scalability Questions?