anchor.diff:            (manifest ,manifest-text)
             (id (or (symbol-name (gensym ,(alex:assoc-value json :name))))
                 :allocation :class)
  -          (background-view nil
  -                           :allocation :class)
  +          (background-buffer nil
  +                             :allocation :class)
             (description ,(alex:assoc-value json :description))
             (extension-directory ,directory)
             (homepage-url ,(alex:assoc-value json :homepage--url))
  
positive.code:                  (loop for name in (handler-names mode)
                         for hook in (list (buffer-loaded-hook (buffer mode)))
                         do (hooks:remove-hook hook name))
                   ;; Destroy the view then there are no more instances of this extension.
                   (when (null (sera:filter (alex:rcurry #'typep (type-of mode))
                                            (alex:mappend #'modes (buffer-list))))
                     (ffi-extension-delete-background-view mode))))
     (constructor (lambda (mode)
                    (let ((content-script-name (gensym)))
                      (hooks:add-hook (buffer-loaded-hook (buffer mode))
                                      (make-activate-content-scripts-handler mode content-script-name))
                      (push content-script-name (handler-names mode))
                      (ffi-extension-make-background-view mode))))))
  
  (export-always 'has-permission-p)
  (defmethod has-permission-p ((extension extension) (permission string))
  
negative.code:        :type (or null string)
         :documentation "A unique ID of the extension.
  Is shared between all the instances of the same extension.")
     (background-buffer nil
                        :documentation "The buffer to host background page of the extension in.
  Is shared between all the instances of the same extension.")
     (description nil
                  :type (or null string))
  