public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $revision = id(new DifferentialRevision())->load($this->id);
     if (!$revision) {
         return new Aphront404Response();
     }
     if (!$request->isFormPost()) {
         $dialog = new AphrontDialogView();
         switch ($this->action) {
             case 'add':
                 $button = 'Subscribe';
                 $title = 'Subscribe to Revision';
                 $prompt = 'Really subscribe to this revision?';
                 break;
             case 'rem':
                 $button = 'Unsubscribe';
                 $title = 'Unsubscribe from Revision';
                 // TODO: Once herald is in, add a notice about not getting any more
                 // herald notifications.
                 $prompt = 'Really unsubscribe from this revision?';
                 break;
             default:
                 return new Aphront400Response();
         }
         $dialog->setUser($user)->setTitle($title)->appendChild('<p>' . $prompt . '</p>')->setSubmitURI($request->getRequestURI())->addSubmitButton($button)->addCancelButton('/D' . $revision->getID());
         return id(new AphrontDialogResponse())->setDialog($dialog);
     }
     $revision->loadRelationships();
     $phid = $user->getPHID();
     switch ($this->action) {
         case 'add':
             DifferentialRevisionEditor::addCCAndUpdateRevision($revision, $phid, $phid);
             break;
         case 'rem':
             DifferentialRevisionEditor::removeCCAndUpdateRevision($revision, $phid, $phid);
             break;
         default:
             return new Aphront400Response();
     }
     return id(new AphrontRedirectResponse())->setURI('/D' . $revision->getID());
 }