diff --git a/mojo/converters/array_string/array_string_type_converters.cc b/mojo/converters/array_string/array_string_type_converters.cc
index 84d3c2a..9f99460 100644
--- a/mojo/converters/array_string/array_string_type_converters.cc
+++ b/mojo/converters/array_string/array_string_type_converters.cc
@@ -23,7 +23,7 @@
     const std::string& input) {
   auto result = Array<uint8_t>::New(input.size());
   memcpy(&result.front(), input.c_str(), input.size());
-  return result.Pass();
+  return result;
 }
 
 }  // namespace mojo
diff --git a/mojo/converters/geometry/geometry_type_converters.cc b/mojo/converters/geometry/geometry_type_converters.cc
index 40d8d89..ad66c11 100644
--- a/mojo/converters/geometry/geometry_type_converters.cc
+++ b/mojo/converters/geometry/geometry_type_converters.cc
@@ -11,7 +11,7 @@
   PointPtr point(Point::New());
   point->x = input.x();
   point->y = input.y();
-  return point.Pass();
+  return point;
 }
 
 // static
@@ -27,7 +27,7 @@
   PointFPtr point(PointF::New());
   point->x = input.x();
   point->y = input.y();
-  return point.Pass();
+  return point;
 }
 
 // static
@@ -43,7 +43,7 @@
   SizePtr size(Size::New());
   size->width = input.width();
   size->height = input.height();
-  return size.Pass();
+  return size;
 }
 
 // static
@@ -60,7 +60,7 @@
   rect->y = input.y();
   rect->width = input.width();
   rect->height = input.height();
-  return rect.Pass();
+  return rect;
 }
 
 // static
@@ -77,7 +77,7 @@
   rect->y = input.y();
   rect->width = input.width();
   rect->height = input.height();
-  return rect.Pass();
+  return rect;
 }
 
 // static
@@ -96,7 +96,7 @@
   matrix.Swap(&storage);
   TransformPtr transform(Transform::New());
   transform->matrix = matrix.Pass();
-  return transform.Pass();
+  return transform;
 }
 
 // static
diff --git a/mojo/converters/input_events/input_events_type_converters.cc b/mojo/converters/input_events/input_events_type_converters.cc
index 6f2495f..7635930 100644
--- a/mojo/converters/input_events/input_events_type_converters.cc
+++ b/mojo/converters/input_events/input_events_type_converters.cc
@@ -225,7 +225,7 @@
     }
     event->key_data = key_data.Pass();
   }
-  return event.Pass();
+  return event;
 }
 
 // static
diff --git a/mojo/converters/ozone_drm_gpu/ozone_drm_gpu_type_converters.cc b/mojo/converters/ozone_drm_gpu/ozone_drm_gpu_type_converters.cc
index 51639a5..3f31e63 100644
--- a/mojo/converters/ozone_drm_gpu/ozone_drm_gpu_type_converters.cc
+++ b/mojo/converters/ozone_drm_gpu/ozone_drm_gpu_type_converters.cc
@@ -26,7 +26,7 @@
   out->size = Size::From<gfx::Size>(in.size);
   out->is_interlaced = in.is_interlaced;
   out->refresh_rate = in.refresh_rate;
-  return out.Pass();
+  return out;
 }
 
 static_assert(static_cast<int>(ui::DISPLAY_CONNECTION_TYPE_NONE) ==
@@ -102,7 +102,7 @@
   out->native_mode = DisplayMode::From<ui::DisplayMode_Params>(in.native_mode);
   out->product_id = in.product_id;
   out->string_representation = in.string_representation;
-  return out.Pass();
+  return out;
 }
 
 }  // namespace mojo
diff --git a/mojo/converters/surfaces/surfaces_type_converters.cc b/mojo/converters/surfaces/surfaces_type_converters.cc
index 2c273dd..f16dac1 100644
--- a/mojo/converters/surfaces/surfaces_type_converters.cc
+++ b/mojo/converters/surfaces/surfaces_type_converters.cc
@@ -198,7 +198,7 @@
   SurfaceIdPtr id(SurfaceId::New());
   id->local = static_cast<uint32_t>(input.id);
   id->id_namespace = cc::SurfaceIdAllocator::NamespaceForId(input);
-  return id.Pass();
+  return id;
 }
 
 // static
@@ -214,7 +214,7 @@
 ColorPtr TypeConverter<ColorPtr, SkColor>::Convert(const SkColor& input) {
   ColorPtr color(Color::New());
   color->rgba = input;
-  return color.Pass();
+  return color;
 }
 
 // static
@@ -228,7 +228,7 @@
   RenderPassIdPtr pass_id(RenderPassId::New());
   pass_id->layer_id = input.layer_id;
   pass_id->index = input.index;
-  return pass_id.Pass();
+  return pass_id;
 }
 
 // static
@@ -337,7 +337,7 @@
     default:
       NOTREACHED() << "Unsupported material " << input.material;
   }
-  return quad.Pass();
+  return quad;
 }
 
 // static
@@ -354,7 +354,7 @@
   state->opacity = input.opacity;
   state->blend_mode = static_cast<SkXfermode>(input.blend_mode);
   state->sorting_context_id = input.sorting_context_id;
-  return state.Pass();
+  return state;
 }
 
 // static
@@ -391,7 +391,7 @@
   DCHECK_EQ(next_sqs_iter.index(), shared_quad_state.size());
   pass->quads = quads.Pass();
   pass->shared_quad_states = shared_quad_state.Pass();
-  return pass.Pass();
+  return pass;
 }
 
 // static
@@ -416,9 +416,9 @@
       ++sqs_iter;
     }
     if (!ConvertDrawQuad(quad, *sqs_iter, pass.get()))
-      return scoped_ptr<cc::RenderPass>();
+      return nullptr;
   }
-  return pass.Pass();
+  return pass;
 }
 
 // static
@@ -430,7 +430,7 @@
   }
   MailboxPtr mailbox(Mailbox::New());
   mailbox->name = name.Pass();
-  return mailbox.Pass();
+  return mailbox;
 }
 
 // static
@@ -449,7 +449,7 @@
   holder->mailbox = Mailbox::From<gpu::Mailbox>(input.mailbox);
   holder->texture_target = input.texture_target;
   holder->sync_point = input.sync_point;
-  return holder.Pass();
+  return holder;
 }
 
 // static
@@ -474,7 +474,7 @@
   transferable->mailbox_holder = MailboxHolder::From(input.mailbox_holder);
   transferable->is_repeated = input.is_repeated;
   transferable->is_software = input.is_software;
-  return transferable.Pass();
+  return transferable;
 }
 
 // static
@@ -501,7 +501,7 @@
   for (size_t i = 0; i < input.size(); ++i) {
     resources[i] = TransferableResource::From(input[i]);
   }
-  return resources.Pass();
+  return resources;
 }
 
 // static
@@ -524,7 +524,7 @@
   returned->sync_point = input.sync_point;
   returned->count = input.count;
   returned->lost = input.lost;
-  return returned.Pass();
+  return returned;
 }
 
 // static
@@ -547,7 +547,7 @@
   for (size_t i = 0; i < input.size(); ++i) {
     resources[i] = ReturnedResource::From(input[i]);
   }
-  return resources.Pass();
+  return resources;
 }
 
 // static
@@ -563,7 +563,7 @@
   for (size_t i = 0; i < pass_list.size(); ++i) {
     frame->passes[i] = Pass::From(*pass_list[i]);
   }
-  return frame.Pass();
+  return frame;
 }
 
 // static
@@ -584,7 +584,7 @@
   }
   scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
   frame->delegated_frame_data = frame_data.Pass();
-  return frame.Pass();
+  return frame;
 }
 
 }  // namespace mojo
diff --git a/mojo/dart/embedder/test/dart_to_cpp_tests.cc b/mojo/dart/embedder/test/dart_to_cpp_tests.cc
index 40ed395..a30cfc0 100644
--- a/mojo/dart/embedder/test/dart_to_cpp_tests.cc
+++ b/mojo/dart/embedder/test/dart_to_cpp_tests.cc
@@ -101,7 +101,7 @@
   string_array[1] = "two";
   string_array[2] = "three";
   args->string_array = string_array.Pass();
-  return args.Pass();
+  return args;
 }
 
 void CheckSampleEchoArgs(const dart_to_cpp::EchoArgs& arg) {
diff --git a/mojo/edk/test/test_utils.cc b/mojo/edk/test/test_utils.cc
index 70c1bde..1a04962 100644
--- a/mojo/edk/test/test_utils.cc
+++ b/mojo/edk/test/test_utils.cc
@@ -86,7 +86,7 @@
   CHECK(h.is_valid());
   util::ScopedFILE rv(fdopen(h.release().fd, mode));
   PCHECK(rv) << "fdopen";
-  return rv.Pass();
+  return rv;
 }
 
 }  // namespace test
diff --git a/mojo/gpu/texture_cache.cc b/mojo/gpu/texture_cache.cc
index aa9478d..f97a2ed 100644
--- a/mojo/gpu/texture_cache.cc
+++ b/mojo/gpu/texture_cache.cc
@@ -57,7 +57,7 @@
     if (texture_size.width == requested_size.width &&
         texture_size.height == requested_size.height) {
       glWaitSyncPointCHROMIUM(sync_point);
-      return texture_info.Pass();
+      return texture_info;
     }
   }
 
@@ -72,7 +72,7 @@
   next_resource_id_++;
   scoped_ptr<TextureInfo> texture_info(
       new TextureInfo(new_texture.Pass(), next_resource_id_));
-  return texture_info.Pass();
+  return texture_info;
 }
 
 void TextureCache::NotifyPendingResourceReturn(
diff --git a/mojo/gpu/texture_uploader.cc b/mojo/gpu/texture_uploader.cc
index 57fbd27..5424f25 100644
--- a/mojo/gpu/texture_uploader.cc
+++ b/mojo/gpu/texture_uploader.cc
@@ -88,7 +88,7 @@
   pass->quads.push_back(quad.Pass());
 
   frame->passes.push_back(pass.Pass());
-  return frame.Pass();
+  return frame;
 }
 
 }  // namespace mojo
diff --git a/mojo/message_pump/handle_watcher_unittest.cc b/mojo/message_pump/handle_watcher_unittest.cc
index 36f15ac..671cfee 100644
--- a/mojo/message_pump/handle_watcher_unittest.cc
+++ b/mojo/message_pump/handle_watcher_unittest.cc
@@ -54,7 +54,7 @@
     loop.reset(new base::MessageLoop());
   else
     loop.reset(new base::MessageLoop(MessagePumpMojo::Create()));
-  return loop.Pass();
+  return loop;
 }
 
 // Helper class to manage the callback and running the message loop waiting for
diff --git a/mojo/public/cpp/bindings/array.h b/mojo/public/cpp/bindings/array.h
index 320d65f..f76d809 100644
--- a/mojo/public/cpp/bindings/array.h
+++ b/mojo/public/cpp/bindings/array.h
@@ -139,7 +139,7 @@
     Array result;
     result.is_null_ = is_null_;
     Traits::Clone(vec_, &result.vec_);
-    return result.Pass();
+    return result;
   }
 
   // Indicates whether the contents of this array are equal to |other|. A null
@@ -255,7 +255,7 @@
     auto result = Array<T>::New(input.size());
     for (size_t i = 0; i < input.size(); ++i)
       result[i] = TypeConverter<T, E>::Convert(input[i]);
-    return result.Pass();
+    return result;
   }
 };
 
@@ -284,7 +284,7 @@
     Array<T> result = Array<T>::New(0u);
     for (auto i : input)
       result.push_back(TypeConverter<T, E>::Convert(i));
-    return result.Pass();
+    return result;
   }
 };
 
diff --git a/mojo/public/cpp/bindings/binding.h b/mojo/public/cpp/bindings/binding.h
index 250945a..531733a 100644
--- a/mojo/public/cpp/bindings/binding.h
+++ b/mojo/public/cpp/bindings/binding.h
@@ -176,7 +176,7 @@
     DestroyRouter();
     // TODO(vtl): The |.Pass()| below is only needed due to an MSVS bug; remove
     // it once that's fixed.
-    return request.Pass();
+    return request;
   }
 
   // Sets an error handler that will be called if a connection error occurs on
diff --git a/mojo/public/cpp/bindings/interface_ptr.h b/mojo/public/cpp/bindings/interface_ptr.h
index b395a11..fffd223 100644
--- a/mojo/public/cpp/bindings/interface_ptr.h
+++ b/mojo/public/cpp/bindings/interface_ptr.h
@@ -178,7 +178,7 @@
   InterfacePtr<Interface> ptr;
   if (info.is_valid())
     ptr.Bind(info.Pass(), waiter);
-  return ptr.Pass();
+  return ptr;
 }
 
 }  // namespace mojo
diff --git a/mojo/public/cpp/bindings/interface_request.h b/mojo/public/cpp/bindings/interface_request.h
index 005f9b6..b9e90a7 100644
--- a/mojo/public/cpp/bindings/interface_request.h
+++ b/mojo/public/cpp/bindings/interface_request.h
@@ -67,7 +67,7 @@
 InterfaceRequest<Interface> MakeRequest(ScopedMessagePipeHandle handle) {
   InterfaceRequest<Interface> request;
   request.Bind(handle.Pass());
-  return request.Pass();
+  return request;
 }
 
 // Creates a new message pipe over which Interface is to be served. Binds the
diff --git a/mojo/public/cpp/bindings/map.h b/mojo/public/cpp/bindings/map.h
index 22164c7..6702cab 100644
--- a/mojo/public/cpp/bindings/map.h
+++ b/mojo/public/cpp/bindings/map.h
@@ -136,7 +136,7 @@
     Map result;
     result.is_null_ = is_null_;
     Traits::Clone(map_, &result.map_);
-    return result.Pass();
+    return result;
   }
 
   // Indicates whether the contents of this map are equal to those of another
@@ -274,7 +274,7 @@
       result.insert(TypeConverter<MojoKey, STLKey>::Convert(pair.first),
                     TypeConverter<MojoValue, STLValue>::Convert(pair.second));
     }
-    return result.Pass();
+    return result;
   }
 };
 
diff --git a/mojo/public/cpp/bindings/tests/equals_unittest.cc b/mojo/public/cpp/bindings/tests/equals_unittest.cc
index 9196d86..4b70af0 100644
--- a/mojo/public/cpp/bindings/tests/equals_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/equals_unittest.cc
@@ -17,7 +17,7 @@
   r->y = 2;
   r->width = 3;
   r->height = 4;
-  return r.Pass();
+  return r;
 }
 
 class EqualsTest : public testing::Test {
diff --git a/mojo/public/cpp/bindings/tests/sample_service_unittest.cc b/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
index 296b83c..c291b1c 100644
--- a/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
@@ -98,7 +98,7 @@
   foo->output_streams = output_streams.Pass();
   foo->array_of_array_of_bools = array_of_array_of_bools.Pass();
 
-  return foo.Pass();
+  return foo;
 }
 
 // Check that the given |Foo| is identical to the one made by |MakeFoo()|.
diff --git a/mojo/public/cpp/bindings/tests/serialization_warning_unittest.cc b/mojo/public/cpp/bindings/tests/serialization_warning_unittest.cc
index f3d3481..2a7bae5 100644
--- a/mojo/public/cpp/bindings/tests/serialization_warning_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/serialization_warning_unittest.cc
@@ -34,7 +34,7 @@
     array[i] = nested_array.Pass();
   }
 
-  return array.Pass();
+  return array;
 }
 
 class SerializationWarningTest : public testing::Test {
diff --git a/mojo/public/cpp/bindings/tests/struct_unittest.cc b/mojo/public/cpp/bindings/tests/struct_unittest.cc
index 0f65a8c..f78b758 100644
--- a/mojo/public/cpp/bindings/tests/struct_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/struct_unittest.cc
@@ -26,7 +26,7 @@
   rect->y = 2 * factor;
   rect->width = 10 * factor;
   rect->height = 20 * factor;
-  return rect.Pass();
+  return rect;
 }
 
 void CheckRect(const Rect& rect, int32_t factor = 1) {
@@ -49,7 +49,7 @@
   output->f_message_pipe = pipe.handle0.Pass();
   output->f_int16 = 42;
 
-  return output.Pass();
+  return output;
 }
 
 template <typename U, typename T>
@@ -77,7 +77,7 @@
   using RawUType = typename mojo::internal::RemoveStructPtr<U>::type;
   U output(RawUType::New());
   Deserialize_(output_data, output.get());
-  return output.Pass();
+  return output;
 }
 
 class StructTest : public testing::Test {
diff --git a/mojo/public/cpp/bindings/tests/type_conversion_unittest.cc b/mojo/public/cpp/bindings/tests/type_conversion_unittest.cc
index 328f5b7..d5059d5 100644
--- a/mojo/public/cpp/bindings/tests/type_conversion_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/type_conversion_unittest.cc
@@ -47,7 +47,7 @@
     rect->y = input.top;
     rect->width = input.right - input.left;
     rect->height = input.bottom - input.top;
-    return rect.Pass();
+    return rect;
   }
 };
 
@@ -69,7 +69,7 @@
     test::NamedRegionPtr region(test::NamedRegion::New());
     region->name = input.name;
     region->rects = Array<test::RectPtr>::From(input.rects);
-    return region.Pass();
+    return region;
   }
 };
 
diff --git a/mojo/public/cpp/bindings/type_converter.h b/mojo/public/cpp/bindings/type_converter.h
index ff94cda..415f82d 100644
--- a/mojo/public/cpp/bindings/type_converter.h
+++ b/mojo/public/cpp/bindings/type_converter.h
@@ -45,7 +45,7 @@
 //       geometry::PointPtr result;
 //       result->x = input.x();
 //       result->y = input.y();
-//       return result.Pass();
+//       return result;
 //     }
 //   };
 //   template <>
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl
index 421ce00..fd28c08 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl
@@ -11,7 +11,7 @@
 {{struct.name}}Ptr {{struct.name}}::New() {
   {{struct.name}}Ptr rv;
   mojo::internal::StructHelper<{{struct.name}}>::Initialize(&rv);
-  return rv.Pass();
+  return rv;
 }
 
 {{struct.name}}::{{struct.name}}()
@@ -33,7 +33,7 @@
   rv->{{field.name}} = {{field.name}};
 {%-     endif %}
 {%-   endfor %}
-  return rv.Pass();
+  return rv;
 }
 {%  endif %}
 
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl
index a737328..0f40dd9 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_definition.tmpl
@@ -2,7 +2,7 @@
 {{union.name}}Ptr {{union.name}}::New() {
   {{union.name}}Ptr rv;
   mojo::internal::StructHelper<{{union.name}}>::Initialize(&rv);
-  return rv.Pass();
+  return rv;
 }
 
 {{union.name}}::{{union.name}}() {
@@ -32,7 +32,7 @@
     case Tag::__UNKNOWN__:
       break;
   };
-  return rv.Pass();
+  return rv;
 }
 {%- endif %}
 
diff --git a/mojo/services/files/c/tests/test_utils.cc b/mojo/services/files/c/tests/test_utils.cc
index 518186f..908c7dd 100644
--- a/mojo/services/files/c/tests/test_utils.cc
+++ b/mojo/services/files/c/tests/test_utils.cc
@@ -40,7 +40,7 @@
   if (error != mojo::files::Error::OK)
     return nullptr;
 
-  return file.Pass();
+  return file;
 }
 
 void CreateTestFileAt(mojo::files::DirectoryPtr* root,
diff --git a/mojo/services/http_server/cpp/lib/http_server_util.cc b/mojo/services/http_server/cpp/lib/http_server_util.cc
index 2e28dd8..36274d3 100644
--- a/mojo/services/http_server/cpp/lib/http_server_util.cc
+++ b/mojo/services/http_server/cpp/lib/http_server_util.cc
@@ -27,7 +27,7 @@
   MOJO_DCHECK(MOJO_RESULT_OK == result);
   response->status_code = status_code;
   response->content_length = num_bytes;
-  return response.Pass();
+  return response;
 }
 
 }  // namespace http_server
diff --git a/mojo/services/surfaces/cpp/surfaces_utils.cc b/mojo/services/surfaces/cpp/surfaces_utils.cc
index b675f73..d37dcbb 100644
--- a/mojo/services/surfaces/cpp/surfaces_utils.cc
+++ b/mojo/services/surfaces/cpp/surfaces_utils.cc
@@ -16,7 +16,7 @@
   transform->matrix[5] = 1.f;
   transform->matrix[10] = 1.f;
   transform->matrix[15] = 1.f;
-  return transform.Pass();
+  return transform;
 }
 }
 
@@ -33,7 +33,7 @@
   sqs->opacity = 1.f;
   sqs->blend_mode = mojo::SkXfermode::kSrc_Mode;
   sqs->sorting_context_id = 0;
-  return sqs.Pass();
+  return sqs;
 }
 
 PassPtr CreateDefaultPass(int id, const Rect& rect) {
@@ -43,7 +43,7 @@
   pass->damage_rect = rect.Clone();
   pass->transform_to_root_target = GetIdentityTransform();
   pass->has_transparent_background = false;
-  return pass.Pass();
+  return pass;
 }
 
 }  // namespace mojo
diff --git a/mojo/services/view_manager/cpp/lib/view.cc b/mojo/services/view_manager/cpp/lib/view.cc
index a42fa12..aa4b30e 100644
--- a/mojo/services/view_manager/cpp/lib/view.cc
+++ b/mojo/services/view_manager/cpp/lib/view.cc
@@ -377,9 +377,7 @@
 ViewportMetricsPtr CreateEmptyViewportMetrics() {
   ViewportMetricsPtr metrics = ViewportMetrics::New();
   metrics->size = Size::New();
-  // TODO(vtl): The |.Pass()| below is only needed due to an MSVS bug; remove it
-  // once that's fixed.
-  return metrics.Pass();
+  return metrics;
 }
 
 }  // namespace
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.cc
index 18e2d2f..de0646d 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.cc
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.cc
@@ -185,7 +185,7 @@
   request->cache_mode = cache_mode_;
   request->headers = headers.Pass();
 
-  return request.Pass();
+  return request;
 }
 
 void AuthenticatingURLLoaderInterceptor::StartRequest(
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_apptest.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_apptest.cc
index ffa64a4..25c737f 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_apptest.cc
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_apptest.cc
@@ -310,7 +310,7 @@
       });
       loop.Run();
     }
-    return response.Pass();
+    return response;
   }
 
   template <class I>
diff --git a/services/clipboard/clipboard_standalone_impl.cc b/services/clipboard/clipboard_standalone_impl.cc
index 4341a4a..aa7541d 100644
--- a/services/clipboard/clipboard_standalone_impl.cc
+++ b/services/clipboard/clipboard_standalone_impl.cc
@@ -30,7 +30,7 @@
     for (auto it = data_types_.cbegin(); it != data_types_.cend(); ++it, ++i)
       types[i] = it.GetKey();
 
-    return types.Pass();
+    return types;
   }
 
   void SetData(Map<String, Array<uint8_t>> data) { data_types_ = data.Pass(); }
diff --git a/services/files/files_impl.cc b/services/files/files_impl.cc
index bfe151b..6826427 100644
--- a/services/files/files_impl.cc
+++ b/services/files/files_impl.cc
@@ -32,7 +32,7 @@
       open((*temp_dir)->path().value().c_str(), O_RDONLY | O_DIRECTORY, 0)));
   PCHECK(temp_dir_fd.is_valid());
   DVLOG(1) << "Made a temporary directory: " << (*temp_dir)->path().value();
-  return temp_dir_fd.Pass();
+  return temp_dir_fd;
 }
 
 #ifndef NDEBUG
diff --git a/services/gles2/command_buffer_type_conversions.cc b/services/gles2/command_buffer_type_conversions.cc
index d08ec4d..2f2858c 100644
--- a/services/gles2/command_buffer_type_conversions.cc
+++ b/services/gles2/command_buffer_type_conversions.cc
@@ -17,7 +17,7 @@
   result->error = input.error;
   result->context_lost_reason = input.context_lost_reason;
   result->generation = input.generation;
-  return result.Pass();
+  return result;
 }
 
 gpu::CommandBuffer::State
@@ -40,7 +40,7 @@
   result->min_range = input.min_range;
   result->max_range = input.max_range;
   result->precision = input.precision;
-  return result.Pass();
+  return result;
 }
 
 gpu::Capabilities::ShaderPrecision TypeConverter<
@@ -63,7 +63,7 @@
   result->low_float = GpuShaderPrecision::From(input.low_float);
   result->medium_float = GpuShaderPrecision::From(input.medium_float);
   result->high_float = GpuShaderPrecision::From(input.high_float);
-  return result.Pass();
+  return result;
 }
 
 gpu::Capabilities::PerStagePrecisions TypeConverter<
@@ -121,7 +121,7 @@
   result->blend_equation_advanced = input.blend_equation_advanced;
   result->blend_equation_advanced_coherent =
       input.blend_equation_advanced_coherent;
-  return result.Pass();
+  return result;
 }
 
 gpu::Capabilities TypeConverter<gpu::Capabilities, GpuCapabilitiesPtr>::Convert(
diff --git a/services/http_server/http_server_apptest.cc b/services/http_server/http_server_apptest.cc
index 6aad3b3..c27aa35 100644
--- a/services/http_server/http_server_apptest.cc
+++ b/services/http_server/http_server_apptest.cc
@@ -125,7 +125,7 @@
   local_address->ipv4->port = 0;
   http_server_factory_->CreateHttpServer(GetProxy(&http_server).Pass(),
                                          local_address.Pass());
-  return http_server.Pass();
+  return http_server;
 }
 
 void CheckServerResponse(mojo::URLResponsePtr response) {
diff --git a/services/js/system/tests/js_to_cpp_tests.cc b/services/js/system/tests/js_to_cpp_tests.cc
index 50f01f6..3001a2a 100644
--- a/services/js/system/tests/js_to_cpp_tests.cc
+++ b/services/js/system/tests/js_to_cpp_tests.cc
@@ -98,7 +98,7 @@
   string_array[1] = "two";
   string_array[2] = "three";
   args->string_array = string_array.Pass();
-  return args.Pass();
+  return args;
 }
 
 void CheckSampleEchoArgs(const js_to_cpp::EchoArgs& arg) {
diff --git a/services/kiosk_wm/merged_service_provider.cc b/services/kiosk_wm/merged_service_provider.cc
index 8f60191..589e40c 100644
--- a/services/kiosk_wm/merged_service_provider.cc
+++ b/services/kiosk_wm/merged_service_provider.cc
@@ -18,7 +18,7 @@
 mojo::ServiceProviderPtr MergedServiceProvider::GetServiceProviderPtr() {
   mojo::ServiceProviderPtr sp;
   binding_.reset(new mojo::Binding<mojo::ServiceProvider>(this, GetProxy(&sp)));
-  return sp.Pass();
+  return sp;
 }
 
 void MergedServiceProvider::ConnectToService(
diff --git a/services/prediction/dictionary_service.cc b/services/prediction/dictionary_service.cc
index a771b39..e9fbc86 100644
--- a/services/prediction/dictionary_service.cc
+++ b/services/prediction/dictionary_service.cc
@@ -78,7 +78,7 @@
     default_dictionary_ = scoped_ptr<latinime::Dictionary>(
         OpenDictionary(path, 0, prediction::kDictFile.size, false));
     if (!default_dictionary_) {
-      return suggestion_words.Clone().Pass();
+      return suggestion_words;
     }
   }
 
@@ -166,7 +166,7 @@
     suggestion_words.push_back(mojo::String(*it));
   }
 
-  return suggestion_words.Clone().Pass();
+  return suggestion_words;
 }
 
 // modified from Android JniDataUtils::constructPrevWordsInfo
diff --git a/services/url_response_disk_cache/url_response_disk_cache_db.cc b/services/url_response_disk_cache/url_response_disk_cache_db.cc
index f7eb587..580f73b 100644
--- a/services/url_response_disk_cache/url_response_disk_cache_db.cc
+++ b/services/url_response_disk_cache/url_response_disk_cache_db.cc
@@ -190,7 +190,7 @@
   DCHECK(status.ok());
   CacheEntryPtr result;
   Deserialize(entry_string, &result);
-  return result.Pass();
+  return result;
 }
 
 void URLResponseDiskCacheDB::PutNew(const std::string& request_origin,
@@ -225,7 +225,7 @@
       }
     }
   }
-  return result.Pass();
+  return result;
 }
 
 void URLResponseDiskCacheDB::Delete(CacheKeyPtr key) {
diff --git a/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc b/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc
index 9bd46f7..b5d4c55 100644
--- a/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc
+++ b/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc
@@ -29,7 +29,7 @@
     entry->response = URLResponse::New();
     entry->entry_directory = "/cache";
     entry->response_body_path = "/cache/content";
-    return entry.Pass();
+    return entry;
   }
 
   base::ScopedTempDir tmp_dir_;
diff --git a/services/url_response_disk_cache/url_response_disk_cache_impl.cc b/services/url_response_disk_cache/url_response_disk_cache_impl.cc
index 7b104b7..8ec138b 100644
--- a/services/url_response_disk_cache/url_response_disk_cache_impl.cc
+++ b/services/url_response_disk_cache/url_response_disk_cache_impl.cc
@@ -85,7 +85,7 @@
   const std::string& string = path.value();
   auto result = Array<uint8_t>::New(string.size());
   memcpy(&result.front(), string.data(), string.size());
-  return result.Pass();
+  return result;
 }
 
 // This method remove the query string of an url if one is present. It does
@@ -207,7 +207,7 @@
   mojo::URLResponsePtr response = mojo::URLResponse::New();
   response->url = url;
   response->status_code = 200;
-  return response.Pass();
+  return response;
 }
 
 void RunMojoCallbackWithResponse(
diff --git a/services/view_manager/animation_runner_unittest.cc b/services/view_manager/animation_runner_unittest.cc
index 2654648..d93d3b8 100644
--- a/services/view_manager/animation_runner_unittest.cc
+++ b/services/view_manager/animation_runner_unittest.cc
@@ -68,14 +68,14 @@
 AnimationValuePtr FloatAnimationValue(float float_value) {
   AnimationValuePtr value(AnimationValue::New());
   value->float_value = float_value;
-  return value.Pass();
+  return value;
 }
 
 // Creates an AnimationValuePtr from the specified transform.
 AnimationValuePtr TransformAnimationValue(const gfx::Transform& transform) {
   AnimationValuePtr value(AnimationValue::New());
   value->transform = Transform::From(transform);
-  return value.Pass();
+  return value;
 }
 
 // Adds an AnimationElement to |group|s last sequence with the specified value.
diff --git a/services/view_manager/gesture_manager.cc b/services/view_manager/gesture_manager.cc
index 4cc6428..47ae5fc 100644
--- a/services/view_manager/gesture_manager.cc
+++ b/services/view_manager/gesture_manager.cc
@@ -60,7 +60,7 @@
       ConvertPointFBetweenViews(view->GetRoot(), view, location));
   result->pointer_data->x = target_location.x();
   result->pointer_data->y = target_location.y();
-  return result.Pass();
+  return result;
 }
 
 }  // namespace
diff --git a/services/view_manager/gesture_manager_unittest.cc b/services/view_manager/gesture_manager_unittest.cc
index 4b7cb91..ca08026 100644
--- a/services/view_manager/gesture_manager_unittest.cc
+++ b/services/view_manager/gesture_manager_unittest.cc
@@ -70,7 +70,7 @@
   event->pointer_data->pointer_id = pointer_id;
   event->pointer_data->x = x;
   event->pointer_data->y = y;
-  return event.Pass();
+  return event;
 }
 
 struct CompareViewByConnectionId {
diff --git a/services/view_manager/scheduled_animation_group.cc b/services/view_manager/scheduled_animation_group.cc
index 69976ee..4cd301a 100644
--- a/services/view_manager/scheduled_animation_group.cc
+++ b/services/view_manager/scheduled_animation_group.cc
@@ -296,7 +296,7 @@
     DCHECK_NE(0u, transport_sequence.elements.size());
     ConvertSequenceToScheduled(transport_sequence, now, &group->sequences_[i]);
   }
-  return group.Pass();
+  return group;
 }
 
 void ScheduledAnimationGroup::ObtainStartValues() {
diff --git a/services/view_manager/view_manager_service_apptest.cc b/services/view_manager/view_manager_service_apptest.cc
index b368513..7ba07ad 100644
--- a/services/view_manager/view_manager_service_apptest.cc
+++ b/services/view_manager/view_manager_service_apptest.cc
@@ -456,7 +456,7 @@
         owner == vm1() ? "mojo:window_manager" : application_impl()->url();
     EXPECT_EQ("OnEmbed creator=" + expected_creator,
               SingleChangeToDescription(*client->tracker()->changes()));
-    return client.Pass();
+    return client;
   }
 
   // ApplicationTestBase:
diff --git a/services/view_manager/view_manager_service_impl.cc b/services/view_manager/view_manager_service_impl.cc
index e7df49b..de1eaf3 100644
--- a/services/view_manager/view_manager_service_impl.cc
+++ b/services/view_manager/view_manager_service_impl.cc
@@ -406,7 +406,7 @@
   auto array = Array<ViewDataPtr>::New(views.size());
   for (size_t i = 0; i < views.size(); ++i)
     array[i] = ViewToViewData(views[i]).Pass();
-  return array.Pass();
+  return array;
 }
 
 ViewDataPtr ViewManagerServiceImpl::ViewToViewData(const ServerView* view) {
@@ -426,7 +426,7 @@
   view_data->drawn = view->IsDrawn(connection_manager_->root());
   view_data->viewport_metrics =
       connection_manager_->display_manager()->GetViewportMetrics().Clone();
-  return view_data.Pass();
+  return view_data;
 }
 
 void ViewManagerServiceImpl::GetViewTreeImpl(
diff --git a/services/window_manager/view_target.cc b/services/window_manager/view_target.cc
index 700515e..e73dd83 100644
--- a/services/window_manager/view_target.cc
+++ b/services/window_manager/view_target.cc
@@ -91,7 +91,7 @@
     scoped_ptr<ViewTargeter> targeter) {
   scoped_ptr<ViewTargeter> old_targeter = targeter_.Pass();
   targeter_ = targeter.Pass();
-  return old_targeter.Pass();
+  return old_targeter;
 }
 
 bool ViewTarget::CanAcceptEvent(const ui::Event& event) {
diff --git a/shell/application_manager/application_manager.cc b/shell/application_manager/application_manager.cc
index 6f90460..6e7b965 100644
--- a/shell/application_manager/application_manager.cc
+++ b/shell/application_manager/application_manager.cc
@@ -271,7 +271,7 @@
   shell->InitializeApplication(mojo::Array<mojo::String>::From(parameters));
   ConnectToClient(shell, resolved_url, requestor_url, services.Pass(),
                   exposed_services.Pass());
-  return application_request.Pass();
+  return application_request;
 }
 
 ShellImpl* ApplicationManager::GetShellImpl(const GURL& url) {
diff --git a/shell/application_manager/local_fetcher.cc b/shell/application_manager/local_fetcher.cc
index c0c04a2..ab9eac1 100644
--- a/shell/application_manager/local_fetcher.cc
+++ b/shell/application_manager/local_fetcher.cc
@@ -81,7 +81,7 @@
   }
   mojo::common::CopyFromFile(path_, data_pipe.producer_handle.Pass(), skip,
                              task_runner, base::Bind(&IgnoreResult));
-  return response.Pass();
+  return response;
 }
 
 void LocalFetcher::AsPath(
diff --git a/shell/application_manager/network_fetcher.cc b/shell/application_manager/network_fetcher.cc
index 5d945ba..bbf9fb7 100644
--- a/shell/application_manager/network_fetcher.cc
+++ b/shell/application_manager/network_fetcher.cc
@@ -63,7 +63,7 @@
   headers.push_back(architecture_header.Pass());
   request->headers = headers.Pass();
 
-  return request.Pass();
+  return request;
 }
 
 // Clone an URLResponse, except for the body.
@@ -79,7 +79,7 @@
   cloned->redirect_method = response->redirect_method;
   cloned->redirect_url = response->redirect_url;
   cloned->redirect_referrer = response->redirect_referrer;
-  return cloned.Pass();
+  return cloned;
 }
 
 // This class is self owned and will delete itself after having tried to update
diff --git a/shell/task_runners.cc b/shell/task_runners.cc
index ae6ecc6..f72de08 100644
--- a/shell/task_runners.cc
+++ b/shell/task_runners.cc
@@ -17,7 +17,7 @@
   base::Thread::Options options;
   options.message_loop_type = base::MessageLoop::TYPE_IO;
   thread->StartWithOptions(options);
-  return thread.Pass();
+  return thread;
 }
 
 }  // namespace
