| Index: base/BUILD.gn | 
| diff --git a/base/BUILD.gn b/base/BUILD.gn | 
| index eff163a61224a463e25e68a7aa330b048599b238..02d0bf91dc109757149c0a8d81eab62f54812b35 100644 | 
| --- a/base/BUILD.gn | 
| +++ b/base/BUILD.gn | 
| @@ -39,7 +39,7 @@ source_set("base_paths") { | 
| "base_paths_win.h", | 
| ] | 
|  | 
| -  if (is_android || is_mac) { | 
| +  if (is_android || is_mac || is_ios) { | 
| sources -= [ "base_paths_posix.cc" ] | 
| } | 
|  | 
| @@ -83,6 +83,7 @@ component("base") { | 
| "android/content_uri_utils.cc", | 
| "android/content_uri_utils.h", | 
| "android/cpu_features.cc", | 
| +    "android/cxa_demangle_stub.cc", | 
| "android/event_log.cc", | 
| "android/event_log.h", | 
| "android/field_trial_list.cc", | 
| @@ -139,11 +140,8 @@ component("base") { | 
| "atomic_ref_count.h", | 
| "atomic_sequence_num.h", | 
| "atomicops.h", | 
| -    "atomicops_internals_gcc.h", | 
| "atomicops_internals_mac.h", | 
| "atomicops_internals_portable.h", | 
| -    "atomicops_internals_x86_gcc.cc", | 
| -    "atomicops_internals_x86_gcc.h", | 
| "atomicops_internals_x86_msvc.h", | 
| "auto_reset.h", | 
| "barrier_closure.cc", | 
| @@ -177,6 +175,7 @@ component("base") { | 
| "containers/linked_list.h", | 
| "containers/mru_cache.h", | 
| "containers/scoped_ptr_hash_map.h", | 
| +    "containers/scoped_ptr_map.h", | 
| "containers/small_map.h", | 
| "containers/stack_container.h", | 
| "cpu.cc", | 
| @@ -270,6 +269,9 @@ component("base") { | 
| "mac/bind_objc_block.h", | 
| "mac/bundle_locations.h", | 
| "mac/bundle_locations.mm", | 
| +    "mac/call_with_eh_frame.cc", | 
| +    "mac/call_with_eh_frame.h", | 
| +    "mac/call_with_eh_frame_asm.S", | 
| "mac/cocoa_protocols.h", | 
| "mac/dispatch_source_mach.cc", | 
| "mac/dispatch_source_mach.h", | 
| @@ -320,10 +322,8 @@ component("base") { | 
| "message_loop/incoming_task_queue.h", | 
| "message_loop/message_loop.cc", | 
| "message_loop/message_loop.h", | 
| -    "message_loop/message_loop_proxy.cc", | 
| -    "message_loop/message_loop_proxy.h", | 
| -    "message_loop/message_loop_proxy_impl.cc", | 
| -    "message_loop/message_loop_proxy_impl.h", | 
| +    "message_loop/message_loop_task_runner.cc", | 
| +    "message_loop/message_loop_task_runner.h", | 
| "message_loop/message_pump.cc", | 
| "message_loop/message_pump.h", | 
| "message_loop/message_pump_android.cc", | 
| @@ -364,7 +364,6 @@ component("base") { | 
| "pending_task.h", | 
| "pickle.cc", | 
| "pickle.h", | 
| -    "port.h", | 
| "posix/eintr_wrapper.h", | 
| "posix/file_descriptor_shuffle.cc", | 
| "posix/global_descriptors.cc", | 
| @@ -427,6 +426,8 @@ component("base") { | 
| "strings/latin1_string_conversions.h", | 
| "strings/nullable_string16.cc", | 
| "strings/nullable_string16.h", | 
| +    "strings/pattern.cc", | 
| +    "strings/pattern.h", | 
| "strings/safe_sprintf.cc", | 
| "strings/safe_sprintf.h", | 
| "strings/string16.cc", | 
| @@ -642,6 +643,8 @@ component("base") { | 
| "sys_info_openbsd.cc", | 
| ] | 
|  | 
| +  data = [] | 
| + | 
| configs += [ ":base_implementation" ] | 
|  | 
| deps = [ | 
| @@ -722,6 +725,11 @@ component("base") { | 
| "sys_info.cc", | 
| "sys_info_posix.cc", | 
| ] | 
| + | 
| +    # We build with a 10.9 min sdk version but lots of code in this directory is | 
| +    # written to target a 10.6 min sdk version and thus depends on declarations | 
| +    # marked as deprecated on 10.9+. Suppress these warnings for now. | 
| +    cflags = [ "-Wno-deprecated-declarations" ] | 
| } else { | 
| # Remove NaCl stuff. | 
| sources -= [ | 
| @@ -742,6 +750,30 @@ component("base") { | 
| "sha1_win.cc", | 
| ] | 
|  | 
| +    # Required for base/stack_trace_win.cc to symbolize correctly. | 
| +    data += [ "$root_build_dir/dbghelp.dll" ] | 
| + | 
| +    if (is_component_build) { | 
| +      # Copy the VS runtime DLLs into the isolate so that they don't have to be | 
| +      # preinstalled on the target machine. The debug runtimes have a "d" at | 
| +      # the end. | 
| +      if (is_debug) { | 
| +        vcrt_suffix = "d" | 
| +      } else { | 
| +        vcrt_suffix = "" | 
| +      } | 
| + | 
| +      # These runtime files are copied to the output directory by the | 
| +      # vs_toolchain script that runs as part of toolchain configuration. | 
| +      data += [ | 
| +        "$root_out_dir/msvcp120${vcrt_suffix}.dll", | 
| +        "$root_out_dir/msvcr120${vcrt_suffix}.dll", | 
| +      ] | 
| +      if (is_asan) { | 
| +        data += [ "//third_party/llvm-build/Release+Asserts/lib/clang/3.7.0/lib/windows/clang_rt.asan_dynamic-i386.dll" ] | 
| +      } | 
| +    } | 
| + | 
| # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. | 
| configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] | 
|  | 
| @@ -758,17 +790,25 @@ component("base") { | 
| } | 
|  | 
| # Mac. | 
| -  if (is_mac) { | 
| +  if (is_mac || is_ios) { | 
| +    # Common Desktop / iOS excludes | 
| sources -= [ | 
| "native_library_posix.cc", | 
| "strings/sys_string_conversions_posix.cc", | 
| "threading/platform_thread_internal_posix.cc", | 
| ] | 
|  | 
| -    # We build with a 10.9 min sdk version but lots of code in this directory is | 
| -    # written to target a 10.6 min sdk version and thus depends on declarations | 
| -    # marked as deprecated on 10.9+. Suppress these warnings for now. | 
| -    cflags = [ "-Wno-deprecated-declarations" ] | 
| +    if (is_asan) { | 
| +      # TODO(GYP) hook up asan on Mac. GYP has this extra dylib: | 
| +      #data += [ "$root_out_dir/libclang_rt.asan_osx_dynamic.dylib" ] | 
| +    } | 
| + | 
| +    if (is_ios) { | 
| +      sources -= [ | 
| +        "files/file_path_watcher_fsevents.cc", | 
| +        "files/file_path_watcher_fsevents.h", | 
| +      ] | 
| +    } | 
| } else { | 
| # Non-Mac. | 
| sources -= [ | 
| @@ -781,6 +821,11 @@ component("base") { | 
|  | 
| # Linux. | 
| if (is_linux) { | 
| +    if (is_asan || is_lsan || is_msan || is_tsan) { | 
| +      # For llvm-sanitizer. | 
| +      data += [ "//third_party/llvm-build/Release+Asserts/lib/libstdc++.so.6" ] | 
| +    } | 
| + | 
| # TODO(brettw) this will need to be parameterized at some point. | 
| linux_configs = [] | 
|  | 
| @@ -810,8 +855,60 @@ component("base") { | 
| } | 
| } | 
|  | 
| +  # iOS | 
| +  if (is_ios) { | 
| +    set_sources_assignment_filter([]) | 
| + | 
| +    sources += [ | 
| +      "atomicops_internals_mac.h", | 
| +      "base_paths_mac.h", | 
| +      "base_paths_mac.mm", | 
| +      "file_version_info_mac.h", | 
| +      "file_version_info_mac.mm", | 
| +      "files/file_util_mac.mm", | 
| +      "mac/bundle_locations.h", | 
| +      "mac/bundle_locations.mm", | 
| +      "mac/call_with_eh_frame.cc", | 
| +      "mac/call_with_eh_frame.h", | 
| +      "mac/foundation_util.h", | 
| +      "mac/foundation_util.mm", | 
| +      "mac/mac_logging.cc", | 
| +      "mac/mac_logging.h", | 
| +      "mac/mach_logging.cc", | 
| +      "mac/mach_logging.h", | 
| +      "mac/objc_property_releaser.h", | 
| +      "mac/objc_property_releaser.mm", | 
| +      "mac/scoped_mach_port.cc", | 
| +      "mac/scoped_mach_port.h", | 
| +      "mac/scoped_mach_vm.cc", | 
| +      "mac/scoped_mach_vm.h", | 
| +      "mac/scoped_nsautorelease_pool.h", | 
| +      "mac/scoped_nsautorelease_pool.mm", | 
| +      "mac/scoped_nsobject.h", | 
| +      "mac/scoped_objc_class_swizzler.h", | 
| +      "mac/scoped_objc_class_swizzler.mm", | 
| +      "message_loop/message_pump_mac.h", | 
| +      "message_loop/message_pump_mac.mm", | 
| +      "strings/sys_string_conversions_mac.mm", | 
| +      "threading/platform_thread_mac.mm", | 
| +      "time/time_mac.cc", | 
| +    ] | 
| + | 
| +    set_sources_assignment_filter(sources_assignment_filter) | 
| +  } | 
| + | 
| +  if (is_asan || is_lsan || is_msan || is_tsan) { | 
| +    data += [ "//tools/valgrind/asan/" ] | 
| +    if (is_win) { | 
| +      data += | 
| +          [ "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer.exe" ] | 
| +    } else { | 
| +      data += [ "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer" ] | 
| +    } | 
| +  } | 
| + | 
| configs += [ "//build/config/compiler:wexit_time_destructors" ] | 
| -  if (is_android && !is_debug) { | 
| +  if (!is_debug) { | 
| configs -= [ "//build/config/compiler:optimize" ] | 
| configs += [ "//build/config/compiler:optimize_max" ] | 
| } | 
| @@ -830,7 +927,7 @@ source_set("base_static") { | 
| "win/pe_image.h", | 
| ] | 
|  | 
| -  if (is_android && !is_debug) { | 
| +  if (!is_debug) { | 
| configs -= [ "//build/config/compiler:optimize" ] | 
| configs += [ "//build/config/compiler:optimize_max" ] | 
| } | 
| @@ -883,7 +980,7 @@ component("i18n") { | 
| "//third_party/icu", | 
| ] | 
|  | 
| -  if (is_android && !is_debug) { | 
| +  if (!is_debug) { | 
| configs -= [ "//build/config/compiler:optimize" ] | 
| configs += [ "//build/config/compiler:optimize_max" ] | 
| } | 
| @@ -995,7 +1092,7 @@ component("prefs") { | 
| ":base", | 
| ] | 
|  | 
| -  if (is_android && !is_debug) { | 
| +  if (!is_debug) { | 
| configs -= [ "//build/config/compiler:optimize" ] | 
| configs += [ "//build/config/compiler:optimize_max" ] | 
| } | 
| @@ -1056,6 +1153,15 @@ if (is_win) { | 
| } | 
| } | 
|  | 
| +# TODO(GYP): Delete this after we've converted everything to GN. | 
| +# The _run targets exist only for compatibility w/ GYP. | 
| +group("base_unittests_run") { | 
| +  testonly = true | 
| +  deps = [ | 
| +    ":base_unittests", | 
| +  ] | 
| +} | 
| + | 
| test("base_unittests") { | 
| sources = [ | 
| "android/application_status_listener_unittest.cc", | 
| @@ -1089,6 +1195,7 @@ test("base_unittests") { | 
| "containers/linked_list_unittest.cc", | 
| "containers/mru_cache_unittest.cc", | 
| "containers/scoped_ptr_hash_map_unittest.cc", | 
| +    "containers/scoped_ptr_map_unittest.cc", | 
| "containers/small_map_unittest.cc", | 
| "containers/stack_container_unittest.cc", | 
| "cpu_unittest.cc", | 
| @@ -1136,6 +1243,7 @@ test("base_unittests") { | 
| "lazy_instance_unittest.cc", | 
| "logging_unittest.cc", | 
| "mac/bind_objc_block_unittest.mm", | 
| +    "mac/call_with_eh_frame_unittest.mm", | 
| "mac/dispatch_source_mach_unittest.cc", | 
| "mac/foundation_util_unittest.mm", | 
| "mac/libdispatch_task_runner_unittest.cc", | 
| @@ -1159,8 +1267,7 @@ test("base_unittests") { | 
| "memory/singleton_unittest.cc", | 
| "memory/weak_ptr_unittest.cc", | 
| "memory/weak_ptr_unittest.nc", | 
| -    "message_loop/message_loop_proxy_impl_unittest.cc", | 
| -    "message_loop/message_loop_proxy_unittest.cc", | 
| +    "message_loop/message_loop_task_runner_unittest.cc", | 
| "message_loop/message_loop_unittest.cc", | 
| "message_loop/message_pump_io_ios_unittest.cc", | 
| "metrics/bucket_ranges_unittest.cc", | 
| @@ -1211,6 +1318,7 @@ test("base_unittests") { | 
| "sha1_unittest.cc", | 
| "stl_util_unittest.cc", | 
| "strings/nullable_string16_unittest.cc", | 
| +    "strings/pattern_unittest.cc", | 
| "strings/safe_sprintf_unittest.cc", | 
| "strings/string16_unittest.cc", | 
| "strings/string_number_conversions_unittest.cc", | 
| @@ -1308,9 +1416,6 @@ test("base_unittests") { | 
|  | 
| data = [ | 
| "test/data/", | 
| - | 
| -    # TODO(dpranke): Remove when icu declares this directly. | 
| -    "$root_out_dir/icudtl.dat", | 
| ] | 
|  | 
| # Allow more direct string conversions on platforms with native utf8 | 
| @@ -1324,14 +1429,15 @@ test("base_unittests") { | 
| ":base_java", | 
| ":base_java_unittest_support", | 
| ] | 
| + | 
| +    # TODO(brettw) I think this should not be here, we should not be using | 
| +    # isolate files. | 
| isolate_file = "base_unittests.isolate" | 
| } | 
|  | 
| if (is_ios) { | 
| sources -= [ | 
| "process/memory_unittest.cc", | 
| -      "process/memory_unittest_mac.h", | 
| -      "process/memory_unittest_mac.mm", | 
| "process/process_unittest.cc", | 
| "process/process_util_unittest.cc", | 
| ] | 
| @@ -1371,6 +1477,15 @@ test("base_unittests") { | 
|  | 
| # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. | 
| configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] | 
| + | 
| +  # Symbols for crashes when running tests on swarming. | 
| +  if (symbol_level > 0) { | 
| +    if (is_win) { | 
| +      data += [ "$root_out_dir/base_unittests.exe.pdb" ] | 
| +    } else if (is_mac) { | 
| +      data += [ "$root_out_dir/base_unittests.dSYM/" ] | 
| +    } | 
| +  } | 
| } | 
|  | 
| if (is_android) { | 
|  |