Add ability to return moved value from FunctorMessageHandler, Optional.

This functionality is desired for this CL:
https://codereview.webrtc.org/2675173003/

BUG=None

Review-Url: https://codereview.webrtc.org/2681283002
Cr-Commit-Position: refs/heads/master@{#16546}
diff --git a/webrtc/base/messagehandler.h b/webrtc/base/messagehandler.h
index 6a3c2ef..72c0dc6 100644
--- a/webrtc/base/messagehandler.h
+++ b/webrtc/base/messagehandler.h
@@ -45,25 +45,15 @@
   }
   const ReturnT& result() const { return result_; }
 
+  // Returns moved result. Should not call result() or MoveResult() again
+  // after this.
+  ReturnT MoveResult() { return std::move(result_); }
+
  private:
   FunctorT functor_;
   ReturnT result_;
 };
 
-// Specialization for std::unique_ptr<ReturnT>.
-template <class ReturnT, class FunctorT>
-class FunctorMessageHandler<class std::unique_ptr<ReturnT>, FunctorT>
-    : public MessageHandler {
- public:
-  explicit FunctorMessageHandler(const FunctorT& functor) : functor_(functor) {}
-  virtual void OnMessage(Message* msg) { result_ = std::move(functor_()); }
-  std::unique_ptr<ReturnT> result() { return std::move(result_); }
-
- private:
-  FunctorT functor_;
-  std::unique_ptr<ReturnT> result_;
-};
-
 // Specialization for ReturnT of void.
 template <class FunctorT>
 class FunctorMessageHandler<void, FunctorT> : public MessageHandler {
@@ -74,6 +64,7 @@
     functor_();
   }
   void result() const {}
+  void MoveResult() {}
 
  private:
   FunctorT functor_;