| Index: base/memory/ref_counted.h
 | 
| diff --git a/base/memory/ref_counted.h b/base/memory/ref_counted.h
 | 
| index 219437ed8d82b8b35835a6c3297d5f719f14c277..5f94b4c37ae2eb510176b585b30a9af20e216d32 100644
 | 
| --- a/base/memory/ref_counted.h
 | 
| +++ b/base/memory/ref_counted.h
 | 
| @@ -14,6 +14,7 @@
 | 
|  #ifndef NDEBUG
 | 
|  #include "base/logging.h"
 | 
|  #endif
 | 
| +#include "base/move.h"
 | 
|  #include "base/threading/thread_collision_warner.h"
 | 
|  #include "build/build_config.h"
 | 
|  
 | 
| @@ -264,6 +265,7 @@ class RefCountedData
 | 
|  //
 | 
|  template <class T>
 | 
|  class scoped_refptr {
 | 
| +  TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(scoped_refptr)
 | 
|   public:
 | 
|    typedef T element_type;
 | 
|  
 | 
| @@ -286,6 +288,11 @@ class scoped_refptr {
 | 
|        AddRef(ptr_);
 | 
|    }
 | 
|  
 | 
| +  template <typename U>
 | 
| +  scoped_refptr(scoped_refptr<U>&& r) : ptr_(r.get()) {
 | 
| +    r.ptr_ = nullptr;
 | 
| +  }
 | 
| +
 | 
|    ~scoped_refptr() {
 | 
|      if (ptr_)
 | 
|        Release(ptr_);
 | 
| @@ -323,6 +330,17 @@ class scoped_refptr {
 | 
|      return *this = r.get();
 | 
|    }
 | 
|  
 | 
| +  scoped_refptr<T>& operator=(scoped_refptr<T>&& r) {
 | 
| +    scoped_refptr<T>(r.Pass()).swap(*this);
 | 
| +    return *this;
 | 
| +  }
 | 
| +
 | 
| +  template <typename U>
 | 
| +  scoped_refptr<T>& operator=(scoped_refptr<U>&& r) {
 | 
| +    scoped_refptr<T>(r.Pass()).swap(*this);
 | 
| +    return *this;
 | 
| +  }
 | 
| +
 | 
|    void swap(T** pp) {
 | 
|      T* p = ptr_;
 | 
|      ptr_ = *pp;
 | 
| @@ -334,6 +352,8 @@ class scoped_refptr {
 | 
|    }
 | 
|  
 | 
|   private:
 | 
| +  template <typename U> friend class scoped_refptr;
 | 
| +
 | 
|    // Allow scoped_refptr<T> to be used in boolean expressions, but not
 | 
|    // implicitly convertible to a real bool (which is dangerous).
 | 
|    //
 | 
| 
 |