diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index dcc23158750986..249dfe638c39e8 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -15407,7 +15407,13 @@ After you create a new supervised user, you can manage their settings at any tim
Pre-populate the New Tab page with popular sites.
-
+
+ Use Android Midi API
+
+
+ Use Android Midi API for WebMIDI (effective only with Android M+ devices).
+
+
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index cefe99b763cc07..9d5ef3e35ce172 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -301,6 +301,7 @@ source_set("browser") {
"//components/web_modal",
"//content/app/resources",
"//media",
+ "//media/midi",
"//mojo/application/public/cpp",
"//mojo/common",
"//mojo/environment:chromium",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index 70939549447d6b..38ac5055c51fc6 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -135,6 +135,7 @@ include_rules = [
"+jni",
"+media/audio", # For media audio hang monitor.
"+media/base", # For media switches
+ "+media/midi", # For midi switches
"+mojo/application/public/cpp",
"+policy", # For generated headers and source
"+ppapi/c", # For various types.
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 5af309b3e287f8..cae14681acb171 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -40,6 +40,7 @@
#include "components/version_info/version_info.h"
#include "content/public/browser/user_metrics.h"
#include "media/base/media_switches.h"
+#include "media/midi/midi_switches.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/ui_base_switches.h"
#include "ui/display/display_switches.h"
@@ -2020,6 +2021,11 @@ const Experiment kExperiments[] = {
kOsAndroid,
ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNTPPopularSites,
switches::kDisableNTPPopularSites)},
+ {"use-android-midi-api",
+ IDS_FLAGS_USE_ANDROID_MIDI_API_NAME,
+ IDS_FLAGS_USE_ANDROID_MIDI_API_DESCRIPTION,
+ kOsAndroid,
+ SINGLE_VALUE_TYPE(switches::kUseAndroidMidiApi)},
#endif // defined(OS_ANDROID)
#if defined(OS_WIN)
{"trace-export-events-to-etw",
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index fb24e8d0333577..428d4f0f12450f 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -3269,6 +3269,7 @@
'../content/app/resources/content_resources.gyp:content_resources',
'../gpu/gpu.gyp:gpu',
'../media/media.gyp:media',
+ '../media/midi/midi.gyp:midi',
'../media/mojo/interfaces/mojo_bindings.gyp:platform_verification_api',
'../mojo/mojo_base.gyp:mojo_application_base',
'../mojo/mojo_base.gyp:mojo_common_lib',
diff --git a/media/midi/BUILD.gn b/media/midi/BUILD.gn
index b7d2a376399fa0..812565467f9fc9 100644
--- a/media/midi/BUILD.gn
+++ b/media/midi/BUILD.gn
@@ -78,6 +78,8 @@ component("midi") {
"midi_port_info.h",
"midi_scheduler.cc",
"midi_scheduler.h",
+ "midi_switches.cc",
+ "midi_switches.h",
]
configs += [ ":midi_config" ]
diff --git a/media/midi/midi.gyp b/media/midi/midi.gyp
index c4fc9455ce9972..cde4a0b6924e7c 100644
--- a/media/midi/midi.gyp
+++ b/media/midi/midi.gyp
@@ -59,6 +59,8 @@
'midi_port_info.h',
'midi_scheduler.cc',
'midi_scheduler.h',
+ 'midi_switches.cc',
+ 'midi_switches.h',
'usb_midi_device_android.cc',
'usb_midi_device_android.h',
'usb_midi_device_factory_android.cc',
diff --git a/media/midi/midi_switches.cc b/media/midi/midi_switches.cc
new file mode 100644
index 00000000000000..1fee12ce92da34
--- /dev/null
+++ b/media/midi/midi_switches.cc
@@ -0,0 +1,14 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/midi/midi_switches.h"
+
+namespace switches {
+
+#if defined(OS_ANDROID)
+// Use Android Midi API for WebMIDI
+const char kUseAndroidMidiApi[] = "use-android-midi-api";
+#endif
+
+} // namespace switches
diff --git a/media/midi/midi_switches.h b/media/midi/midi_switches.h
new file mode 100644
index 00000000000000..471d3a7be4398b
--- /dev/null
+++ b/media/midi/midi_switches.h
@@ -0,0 +1,21 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Defines all the "midi" command-line switches.
+
+#ifndef MEDIA_MIDI_MIDI_SWITCHES_H_
+#define MEDIA_MIDI_MIDI_SWITCHES_H_
+
+#include "build/build_config.h"
+#include "media/midi/midi_export.h"
+
+namespace switches {
+
+#if defined(OS_ANDROID)
+MIDI_EXPORT extern const char kUseAndroidMidiApi[];
+#endif
+
+} // namespace switches
+
+#endif // MEDIA_MIDI_MIDI_SWITCHES_H_
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 3beb9fe011b65f..f4fe5160d4e6dd 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -64642,6 +64642,7 @@ To add a new entry, add it with any value and run test to compute valid value.
+