summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorrockot@chromium.org <rockot@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-04 06:04:25 +0000
committerrockot@chromium.org <rockot@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-04 06:04:25 +0000
commit1ee7f899b6db8fbfbc19efd2f236d077752528e1 (patch)
tree3623bc3e13f8c468afa4a7c15d8d2e4d118e675c /extensions
parent644533a496b33e3c89b7ec22cd24464ce4425fad (diff)
downloadchromium_src-1ee7f899b6db8fbfbc19efd2f236d077752528e1.zip
chromium_src-1ee7f899b6db8fbfbc19efd2f236d077752528e1.tar.gz
chromium_src-1ee7f899b6db8fbfbc19efd2f236d077752528e1.tar.bz2
Move extension_function_histogram_value to src/extensions
BUG=348248 Review URL: https://codereview.chromium.org/180373005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254689 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions')
-rw-r--r--extensions/browser/DEPS1
-rw-r--r--extensions/browser/PRESUBMIT.py304
-rwxr-xr-xextensions/browser/PRESUBMIT_test.py236
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_1.txt35
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_10.txt29
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_11.txt32
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_2.txt33
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_3.txt34
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_4.txt5
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_5.txt5
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_6.txt9
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_7.txt40
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_8.txt35
-rw-r--r--extensions/browser/PRESUBMIT_test_new_file_9.txt38
-rw-r--r--extensions/browser/PRESUBMIT_test_old_file.txt34
-rw-r--r--extensions/browser/extension_function.h2
-rw-r--r--extensions/browser/extension_function_histogram_value.h768
17 files changed, 1638 insertions, 2 deletions
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS
index 5923763..3ab23468 100644
--- a/extensions/browser/DEPS
+++ b/extensions/browser/DEPS
@@ -16,7 +16,6 @@ include_rules = [
"+chrome/browser/extensions/api/preference/preference_api.h",
"+chrome/browser/extensions/api/runtime/runtime_api.h",
"+chrome/browser/extensions/extension_function_dispatcher.h",
- "+chrome/browser/extensions/extension_function_histogram_value.h",
"+chrome/browser/extensions/extension_host.h",
"+chrome/browser/extensions/extension_service.h",
"+chrome/browser/renderer_host/chrome_render_message_filter.h",
diff --git a/extensions/browser/PRESUBMIT.py b/extensions/browser/PRESUBMIT.py
new file mode 100644
index 0000000..c8777a6
--- /dev/null
+++ b/extensions/browser/PRESUBMIT.py
@@ -0,0 +1,304 @@
+# Copyright 2014 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.
+
+"""Chromium presubmit script for src/extensions/browser.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into gcl.
+"""
+
+def GetPreferredTrySlaves():
+ return ['linux_chromeos']
+
+class HistogramValueChecker(object):
+ """Verify that changes to "extension_function_histogram_value.h" are valid.
+
+ See comments at the top of the "extension_function_histogram_value.h" file
+ for what are considered valid changes. There are situations where this script
+ gives false positive warnings, i.e. it warns even though the edit is
+ legitimate. Since the script warns using prompt warnings, the user can always
+ choose to continue. The main point is to attract the attention to all
+ (potentially or not) invalid edits.
+
+ """
+
+ # The name of the file we want to check against
+ LOCAL_PATH = "extensions/browser/extension_function_histogram_value.h"
+
+ # The markers we look for in the above source file as delimiters of the enum
+ # definition.
+ ENUM_START_MARKER = "enum HistogramValue {"
+ ENUM_END_MARKER = " // Last entry:"
+
+ def __init__(self, input_api, output_api):
+ self.input_api = input_api
+ self.output_api = output_api
+ self.results = []
+
+ class EnumRange(object):
+ """Represents a range of line numbers (1-based)"""
+ def __init__(self, first_line, last_line):
+ self.first_line = first_line
+ self.last_line = last_line
+
+ def Count(self):
+ return self.last_line - self.first_line + 1
+
+ def Contains(self, line_num):
+ return self.first_line <= line_num and line_num <= self.last_line
+
+ def LogInfo(self, message):
+ self.input_api.logging.info(message)
+ return
+
+ def LogDebug(self, message):
+ self.input_api.logging.debug(message)
+ return
+
+ def ComputeEnumRangeInContents(self, contents):
+ """Returns an |EnumRange| object representing the line extent of the
+ HistogramValue enum members in |contents|. The line numbers are 1-based,
+ compatible with line numbers returned by AffectedFile.ChangeContents().
+ |contents| is a list of strings reprenting the lines of a text file.
+
+ If either ENUM_START_MARKER or ENUM_END_MARKER cannot be found in
+ |contents|, returns None and emits detailed warnings about the problem.
+
+ """
+ first_enum_line = 0
+ last_enum_line = 0
+ line_num = 1 # Line numbers are 1-based
+ for line in contents:
+ if line.startswith(self.ENUM_START_MARKER):
+ first_enum_line = line_num + 1
+ elif line.startswith(self.ENUM_END_MARKER):
+ last_enum_line = line_num
+ line_num += 1
+
+ if first_enum_line == 0:
+ self.EmitWarning("The presubmit script could not find the start of the "
+ "enum definition (\"%s\"). Did the enum definition "
+ "change?" % self.ENUM_START_MARKER)
+ return None
+
+ if last_enum_line == 0:
+ self.EmitWarning("The presubmit script could not find the end of the "
+ "enum definition (\"%s\"). Did the enum definition "
+ "change?" % self.ENUM_END_MARKER)
+ return None
+
+ if first_enum_line >= last_enum_line:
+ self.EmitWarning("The presubmit script located the start of the enum "
+ "definition (\"%s\" at line %d) *after* its end "
+ "(\"%s\" at line %d). Something is not quite right."
+ % (self.ENUM_START_MARKER, first_enum_line,
+ self.ENUM_END_MARKER, last_enum_line))
+ return None
+
+ self.LogInfo("Line extent of |HistogramValue| enum definition: "
+ "first_line=%d, last_line=%d."
+ % (first_enum_line, last_enum_line))
+ return self.EnumRange(first_enum_line, last_enum_line)
+
+ def ComputeEnumRangeInNewFile(self, affected_file):
+ return self.ComputeEnumRangeInContents(affected_file.NewContents())
+
+ def GetLongMessage(self):
+ return str("The file \"%s\" contains the definition of the "
+ "|HistogramValue| enum which should be edited in specific ways "
+ "only - *** read the comments at the top of the header file ***"
+ ". There are changes to the file that may be incorrect and "
+ "warrant manual confirmation after review. Note that this "
+ "presubmit script can not reliably report the nature of all "
+ "types of invalid changes, especially when the diffs are "
+ "complex. For example, an invalid deletion may be reported "
+ "whereas the change contains a valid rename."
+ % self.LOCAL_PATH)
+
+ def EmitWarning(self, message, line_number=None, line_text=None):
+ """Emits a presubmit prompt warning containing the short message
+ |message|. |item| is |LOCAL_PATH| with optional |line_number| and
+ |line_text|.
+
+ """
+ if line_number is not None and line_text is not None:
+ item = "%s(%d): %s" % (self.LOCAL_PATH, line_number, line_text)
+ elif line_number is not None:
+ item = "%s(%d)" % (self.LOCAL_PATH, line_number)
+ else:
+ item = self.LOCAL_PATH
+ long_message = self.GetLongMessage()
+ self.LogInfo(message)
+ self.results.append(
+ self.output_api.PresubmitPromptWarning(message, [item], long_message))
+
+ def CollectRangesInsideEnumDefinition(self, affected_file,
+ first_line, last_line):
+ """Returns a list of triplet (line_start, line_end, line_text) of ranges of
+ edits changes. The |line_text| part is the text at line |line_start|.
+ Since it used only for reporting purposes, we do not need all the text
+ lines in the range.
+
+ """
+ results = []
+ previous_line_number = 0
+ previous_range_start_line_number = 0
+ previous_range_start_text = ""
+
+ def addRange():
+ tuple = (previous_range_start_line_number,
+ previous_line_number,
+ previous_range_start_text)
+ results.append(tuple)
+
+ for line_number, line_text in affected_file.ChangedContents():
+ if first_line <= line_number and line_number <= last_line:
+ self.LogDebug("Line change at line number " + str(line_number) + ": " +
+ line_text)
+ # Start a new interval if none started
+ if previous_range_start_line_number == 0:
+ previous_range_start_line_number = line_number
+ previous_range_start_text = line_text
+ # Add new interval if we reached past the previous one
+ elif line_number != previous_line_number + 1:
+ addRange()
+ previous_range_start_line_number = line_number
+ previous_range_start_text = line_text
+ previous_line_number = line_number
+
+ # Add a last interval if needed
+ if previous_range_start_line_number != 0:
+ addRange()
+ return results
+
+ def CheckForFileDeletion(self, affected_file):
+ """Emits a warning notification if file has been deleted """
+ if not affected_file.NewContents():
+ self.EmitWarning("The file seems to be deleted in the changelist. If "
+ "your intent is to really delete the file, the code in "
+ "PRESUBMIT.py should be updated to remove the "
+ "|HistogramValueChecker| class.");
+ return False
+ return True
+
+ def GetDeletedLinesFromScmDiff(self, affected_file):
+ """Return a list of of line numbers (1-based) corresponding to lines
+ deleted from the new source file (if they had been present in it). Note
+ that if multiple contiguous lines have been deleted, the returned list will
+ contain contiguous line number entries. To prevent false positives, we
+ return deleted line numbers *only* from diff chunks which decrease the size
+ of the new file.
+
+ Note: We need this method because we have access to neither the old file
+ content nor the list of "delete" changes from the current presubmit script
+ API.
+
+ """
+ results = []
+ line_num = 0
+ deleting_lines = False
+ for line in affected_file.GenerateScmDiff().splitlines():
+ # Parse the unified diff chunk optional section heading, which looks like
+ # @@ -l,s +l,s @@ optional section heading
+ m = self.input_api.re.match(
+ r'^@@ \-([0-9]+)\,([0-9]+) \+([0-9]+)\,([0-9]+) @@', line)
+ if m:
+ old_line_num = int(m.group(1))
+ old_size = int(m.group(2))
+ new_line_num = int(m.group(3))
+ new_size = int(m.group(4))
+ line_num = new_line_num
+ # Return line numbers only from diff chunks decreasing the size of the
+ # new file
+ deleting_lines = old_size > new_size
+ continue
+ if not line.startswith('-'):
+ line_num += 1
+ if deleting_lines and line.startswith('-') and not line.startswith('--'):
+ results.append(line_num)
+ return results
+
+ def CheckForEnumEntryDeletions(self, affected_file):
+ """Look for deletions inside the enum definition. We currently use a
+ simple heuristics (not 100% accurate): if there are deleted lines inside
+ the enum definition, this might be a deletion.
+
+ """
+ range_new = self.ComputeEnumRangeInNewFile(affected_file)
+ if not range_new:
+ return False
+
+ is_ok = True
+ for line_num in self.GetDeletedLinesFromScmDiff(affected_file):
+ if range_new.Contains(line_num):
+ self.EmitWarning("It looks like you are deleting line(s) from the "
+ "enum definition. This should never happen.",
+ line_num)
+ is_ok = False
+ return is_ok
+
+ def CheckForEnumEntryInsertions(self, affected_file):
+ range = self.ComputeEnumRangeInNewFile(affected_file)
+ if not range:
+ return False
+
+ first_line = range.first_line
+ last_line = range.last_line
+
+ # Collect the range of changes inside the enum definition range.
+ is_ok = True
+ for line_start, line_end, line_text in \
+ self.CollectRangesInsideEnumDefinition(affected_file,
+ first_line,
+ last_line):
+ # The only edit we consider valid is adding 1 or more entries *exactly*
+ # at the end of the enum definition. Every other edit inside the enum
+ # definition will result in a "warning confirmation" message.
+ #
+ # TODO(rpaquay): We currently cannot detect "renames" of existing entries
+ # vs invalid insertions, so we sometimes will warn for valid edits.
+ is_valid_edit = (line_end == last_line - 1)
+
+ self.LogDebug("Edit range in new file at starting at line number %d and "
+ "ending at line number %d: valid=%s"
+ % (line_start, line_end, is_valid_edit))
+
+ if not is_valid_edit:
+ self.EmitWarning("The change starting at line %d and ending at line "
+ "%d is *not* located *exactly* at the end of the "
+ "enum definition. Unless you are renaming an "
+ "existing entry, this is not a valid changes, as new "
+ "entries should *always* be added at the end of the "
+ "enum definition, right before the 'ENUM_BOUNDARY' "
+ "entry." % (line_start, line_end),
+ line_start,
+ line_text)
+ is_ok = False
+ return is_ok
+
+ def PerformChecks(self, affected_file):
+ if not self.CheckForFileDeletion(affected_file):
+ return
+ if not self.CheckForEnumEntryDeletions(affected_file):
+ return
+ if not self.CheckForEnumEntryInsertions(affected_file):
+ return
+
+ def ProcessHistogramValueFile(self, affected_file):
+ self.LogInfo("Start processing file \"%s\"" % affected_file.LocalPath())
+ self.PerformChecks(affected_file)
+ self.LogInfo("Done processing file \"%s\"" % affected_file.LocalPath())
+
+ def Run(self):
+ for file in self.input_api.AffectedFiles(include_deletes=True):
+ if file.LocalPath() == self.LOCAL_PATH:
+ self.ProcessHistogramValueFile(file)
+ return self.results
+
+def CheckChangeOnUpload(input_api, output_api):
+ results = []
+ results += HistogramValueChecker(input_api, output_api).Run()
+ results += input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
+ return results
+
diff --git a/extensions/browser/PRESUBMIT_test.py b/extensions/browser/PRESUBMIT_test.py
new file mode 100755
index 0000000..99cabf5
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test.py
@@ -0,0 +1,236 @@
+#!/usr/bin/env python
+# Copyright 2014 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.
+
+import difflib
+import os
+import re
+import unittest
+
+import PRESUBMIT
+
+class MockLogging(object):
+ def __init__(self):
+ self.lines = []
+
+ def info(self, message):
+ self.lines.append(message)
+
+ def debug(self, message):
+ self.lines.append(message)
+
+class MockInputApi(object):
+ def __init__(self):
+ self.re = re
+ self.os_path = os.path
+ self.files = []
+ self.is_committing = False
+ self.logging = MockLogging()
+
+ def AffectedFiles(self, include_deletes=None):
+ return self.files
+
+
+class MockOutputApi(object):
+ class PresubmitResult(object):
+ def __init__(self, message, items=None, long_text=''):
+ self.message = message
+ self.items = items
+ self.long_text = long_text
+
+ class PresubmitError(PresubmitResult):
+ def __init__(self, message, items, long_text=''):
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
+ self.type = 'error'
+
+ class PresubmitPromptWarning(PresubmitResult):
+ def __init__(self, message, items, long_text=''):
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
+ self.type = 'warning'
+
+ class PresubmitNotifyResult(PresubmitResult):
+ def __init__(self, message, items, long_text=''):
+ MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
+ self.type = 'notify'
+
+
+class MockFile(object):
+ def __init__(self, local_path, old_contents, new_contents):
+ self._local_path = local_path
+ self._new_contents = new_contents
+ self._old_contents = old_contents
+ self._cached_changed_contents = None
+
+ def ChangedContents(self):
+ return self._changed_contents
+
+ def NewContents(self):
+ return self._new_contents
+
+ def LocalPath(self):
+ return self._local_path
+
+ def IsDirectory(self):
+ return False
+
+ def GenerateScmDiff(self):
+ result = ""
+ for line in difflib.unified_diff(self._old_contents, self._new_contents,
+ self._local_path, self._local_path):
+ result += line
+ return result
+
+ # NOTE: This method is a copy of ChangeContents method of AffectedFile in
+ # presubmit_support.py
+ def ChangedContents(self):
+ """Returns a list of tuples (line number, line text) of all new lines.
+
+ This relies on the scm diff output describing each changed code section
+ with a line of the form
+
+ ^@@ <old line num>,<old size> <new line num>,<new size> @@$
+ """
+ if self._cached_changed_contents is not None:
+ return self._cached_changed_contents[:]
+ self._cached_changed_contents = []
+ line_num = 0
+
+ if self.IsDirectory():
+ return []
+
+ for line in self.GenerateScmDiff().splitlines():
+ m = re.match(r'^@@ [0-9\,\+\-]+ \+([0-9]+)\,[0-9]+ @@', line)
+ if m:
+ line_num = int(m.groups(1)[0])
+ continue
+ if line.startswith('+') and not line.startswith('++'):
+ self._cached_changed_contents.append((line_num, line[1:]))
+ if not line.startswith('-'):
+ line_num += 1
+ return self._cached_changed_contents[:]
+
+
+class MockChange(object):
+ def __init__(self, changed_files):
+ self._changed_files = changed_files
+
+ def LocalPaths(self):
+ return self._changed_files
+
+
+class HistogramValueCheckerTest(unittest.TestCase):
+ TEST_FILE_PATTERN = "PRESUBMIT_test_new_file_%s.txt"
+
+ def _ReadTextFileContents(self, path):
+ """Given a path, returns a list of strings corresponding to the text lines
+ in the file. Reads files in text format.
+
+ """
+ fo = open(path, 'r')
+ try:
+ contents = fo.readlines()
+ finally:
+ fo.close()
+ return contents
+
+ def _ReadInputFile(self):
+ return self._ReadTextFileContents("PRESUBMIT_test_old_file.txt")
+
+ def _PrepareTest(self, new_file_path):
+ old_contents = self._ReadInputFile()
+ if not new_file_path:
+ new_contents = []
+ else:
+ new_contents = self._ReadTextFileContents(new_file_path)
+ input_api = MockInputApi()
+ mock_file = MockFile(PRESUBMIT.HistogramValueChecker.LOCAL_PATH,
+ old_contents,
+ new_contents)
+ input_api.files.append(mock_file)
+ output_api = MockOutputApi()
+ return input_api, output_api
+
+ def _RunTest(self, new_file_path):
+ input_api, output_api = self._PrepareTest(new_file_path)
+ checker = PRESUBMIT.HistogramValueChecker(input_api, output_api)
+ results = checker.Run()
+ return results
+
+ def testDeleteFile(self):
+ results = self._RunTest(new_file_path=None)
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We hould get a single warning about file deletion.")
+
+ def testSimpleValidEdit(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "1")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(0, len(results),
+ "We should get no warning for simple edits.")
+
+ def testSingleDeletionOfEntry(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "2")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for an entry deletion.")
+
+ def testSingleRenameOfEntry(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "3")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for an entry rename, even "
+ "though it is not optimal.")
+
+ def testMissingEnumStartOfEntry(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "4")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for a missing enum marker.")
+
+ def testMissingEnumEndOfEntry(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "5")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for a missing enum marker.")
+
+ def testInvertedEnumMarkersOfEntry(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "6")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for inverted enum markers.")
+
+ def testMultipleInvalidEdits(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "7")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(3, len(results),
+ "We should get 3 warnings (one per edit).")
+
+ def testSingleInvalidInserts(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "8")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(1, len(results),
+ "We should get a warning for a single invalid "
+ "insertion inside the enum.")
+
+ def testMulitpleValidInserts(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "9")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(0, len(results),
+ "We should not get a warning mulitple valid edits")
+
+ def testSingleValidDeleteOutsideOfEnum(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "10")
+ # TODO(rpaquay) How to check it's the expected warning?'
+ self.assertEquals(0, len(results),
+ "We should not get a warning for a deletion outside of "
+ "the enum")
+
+ def testCommentIsNotEnumEndMarker(self):
+ results = self._RunTest(self.TEST_FILE_PATTERN % "11")
+ self.assertEquals(1, len(results),
+ "We should get a warning if '// Last Entry' is not the "
+ "enum end marker")
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/extensions/browser/PRESUBMIT_test_new_file_1.txt b/extensions/browser/PRESUBMIT_test_new_file_1.txt
new file mode 100644
index 0000000..cf894a7
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_1.txt
@@ -0,0 +1,35 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ VALID_INSERTION,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_10.txt b/extensions/browser/PRESUBMIT_test_new_file_10.txt
new file mode 100644
index 0000000..745b130
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_10.txt
@@ -0,0 +1,29 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_11.txt b/extensions/browser/PRESUBMIT_test_new_file_11.txt
new file mode 100644
index 0000000..d02dd03
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_11.txt
@@ -0,0 +1,32 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_2.txt b/extensions/browser/PRESUBMIT_test_new_file_2.txt
new file mode 100644
index 0000000..e242545
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_2.txt
@@ -0,0 +1,33 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_3.txt b/extensions/browser/PRESUBMIT_test_new_file_3.txt
new file mode 100644
index 0000000..3e18f29b
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_3.txt
@@ -0,0 +1,34 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES2, // Rename here!!!
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_4.txt b/extensions/browser/PRESUBMIT_test_new_file_4.txt
new file mode 100644
index 0000000..8bab558
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_4.txt
@@ -0,0 +1,5 @@
+// Missing "HistrogramValue" enum
+
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
diff --git a/extensions/browser/PRESUBMIT_test_new_file_5.txt b/extensions/browser/PRESUBMIT_test_new_file_5.txt
new file mode 100644
index 0000000..5c75baa
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_5.txt
@@ -0,0 +1,5 @@
+
+enum HistogramValue {
+
+
+// Missing end enum marker
diff --git a/extensions/browser/PRESUBMIT_test_new_file_6.txt b/extensions/browser/PRESUBMIT_test_new_file_6.txt
new file mode 100644
index 0000000..d5d847b
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_6.txt
@@ -0,0 +1,9 @@
+// End enum marker is before start enum marker
+
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+
diff --git a/extensions/browser/PRESUBMIT_test_new_file_7.txt b/extensions/browser/PRESUBMIT_test_new_file_7.txt
new file mode 100644
index 0000000..f928b71
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_7.txt
@@ -0,0 +1,40 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ BROWSINGDATA_REMOVEWEBSQL2,
+ BROWSINGDATA_REMOVEWEBSQL3,
+ BROWSINGDATA_REMOVEWEBSQL4,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME2,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME3,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS2,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_8.txt b/extensions/browser/PRESUBMIT_test_new_file_8.txt
new file mode 100644
index 0000000..8142053
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_8.txt
@@ -0,0 +1,35 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ BROWSINGDATA_REMOVEWEBSQL2,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_new_file_9.txt b/extensions/browser/PRESUBMIT_test_new_file_9.txt
new file mode 100644
index 0000000..75d8cce
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_new_file_9.txt
@@ -0,0 +1,38 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ BLAH1,
+ BLAH2,
+ BLAH3,
+ BLAH4,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/PRESUBMIT_test_old_file.txt b/extensions/browser/PRESUBMIT_test_old_file.txt
new file mode 100644
index 0000000..51cd734
--- /dev/null
+++ b/extensions/browser/PRESUBMIT_test_old_file.txt
@@ -0,0 +1,34 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+
+namespace extensions {
+namespace functions {
+
+//
+// This is some comment.
+// This is another comment.
+// This is yet another comment.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h
index b0af0ae..996fbce 100644
--- a/extensions/browser/extension_function.h
+++ b/extensions/browser/extension_function.h
@@ -15,9 +15,9 @@
#include "base/memory/weak_ptr.h"
#include "base/process/process.h"
#include "base/sequenced_task_runner_helpers.h"
-#include "chrome/browser/extensions/extension_function_histogram_value.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/console_message_level.h"
+#include "extensions/browser/extension_function_histogram_value.h"
#include "extensions/browser/info_map.h"
#include "extensions/common/extension.h"
#include "ipc/ipc_message.h"
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
new file mode 100644
index 0000000..910b39b
--- /dev/null
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -0,0 +1,768 @@
+// Copyright 2014 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_
+
+namespace extensions {
+namespace functions {
+
+// Short version:
+// *Never* reorder or delete entries in the |HistogramValue| enumeration.
+// When creating a new extension function, add a new entry at the end of the
+// enum, just prior to ENUM_BOUNDARY.
+//
+// Long version:
+// This enumeration is used to associate a unique integer value to each
+// extension function so that their usage can be recorded in histogram charts.
+// Given we want the values recorded in the these charts to remain stable over
+// time for comparison purposes, once an entry has been added to the
+// enumeration, it should never be removed or moved to another spot in the
+// enum.
+//
+// Here are instructions how to manage entries depending on what you are trying
+// to achieve.
+//
+// 1) Creating a new extension function:
+//
+// Add a new entry at the end of the |HistogramValue| enum. The name of the
+// entry should follow this algorithm:
+// a) Take the string value passed as first argument to
+// DECLARE_EXTENSION_FUNCTION.
+// b) Replace '.' with '_'.
+// c) Make all letters uppercase.
+//
+// Example: "tabs.create" -> TABS_CREATE
+//
+// 2) Deleting an existing function:
+//
+// Given an existing entry should *never* be removed from this enumeration,
+// it is recommended to add a "DELETED_" prefix to the existing entry.
+//
+// 3) Renaming an existing function:
+//
+// There are 2 options, depending if you want to keep accruing data in the
+// *existing* histogram stream or in a *new* one.
+//
+// a) If you want keep recording usages of the extension function in the
+// *existing* histogram stream, simply rename the enum entry to match
+// the new extension function name, following the same naming rule as
+// mentioned in 1). The enum entry will keep the same underlying integer
+// value, so the same histogram stream will be used for recording
+// usages.
+//
+// b) If you want start recording usages of the extension function to in a
+// *new* histogram stream, follow the instructions in step 1) and 2)
+// above. This will effectively deprecate the old histogram stream and
+// creates a new one for the new function name.
+//
+enum HistogramValue {
+ UNKNOWN = 0,
+ WEBNAVIGATION_GETALLFRAMES,
+ BROWSINGDATA_REMOVEWEBSQL,
+ ALARMS_CREATE,
+ FILEBROWSERPRIVATE_REMOVEFILEWATCH,
+ COOKIES_GET,
+ FONTSETTINGS_GETMINIMUMFONTSIZE,
+ CHROMEOSINFOPRIVATE_GET,
+ BOOKMARKMANAGERPRIVATE_CUT,
+ TABS_CAPTUREVISIBLETAB,
+ MANAGEMENT_SETENABLED,
+ HISTORY_DELETEALL,
+ STORAGE_GET,
+ SOCKET_SETKEEPALIVE,
+ DOWNLOADS_CANCEL,
+ BOOKMARKS_CREATE,
+ BOOKMARKS_UPDATE,
+ FILEBROWSERPRIVATE_GETDRIVEFILES,
+ TERMINALPRIVATE_ONTERMINALRESIZE,
+ DELETED_FILEBROWSERPRIVATE_REQUESTDIRECTORYREFRESH,
+ BLUETOOTH_GETADAPTERSTATE,
+ FILEBROWSERPRIVATE_CANCELFILETRANSFERS,
+ FILEBROWSERPRIVATE_PINDRIVEFILE,
+ SOCKET_WRITE,
+ OMNIBOX_SETDEFAULTSUGGESTION,
+ TTS_SPEAK,
+ WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS,
+ BROWSINGDATA_REMOVEHISTORY,
+ DELETED_FILEBROWSERPRIVATE_ISFULLSCREEN,
+ AUTOTESTPRIVATE_LOGOUT,
+ EXPERIMENTAL_HISTORY_GETMOSTVISITED,
+ BLUETOOTH_DISCONNECT,
+ BLUETOOTH_SETOUTOFBANDPAIRINGDATA,
+ BOOKMARKMANAGERPRIVATE_CANPASTE,
+ AUTOTESTPRIVATE_RESTART,
+ USB_CLAIMINTERFACE,
+ MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT,
+ DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO,
+ HISTORY_GETVISITS,
+ SOCKET_BIND,
+ TABS_MOVE,
+ SOCKET_DISCONNECT,
+ FILESYSTEM_GETWRITABLEENTRY,
+ SYNCFILESYSTEM_REQUESTFILESYSTEM,
+ COMMANDS_GETALL,
+ EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION,
+ VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT,
+ BOOKMARKMANAGERPRIVATE_GETSUBTREE,
+ DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT,
+ BOOKMARKS_GETRECENT,
+ APP_CURRENTWINDOWINTERNAL_SETBOUNDS,
+ CLOUDPRINTPRIVATE_SETUPCONNECTOR,
+ SERIAL_SETCONTROLSIGNALS,
+ DELETED_FILEBROWSERPRIVATE_SETLASTMODIFIED,
+ IDLE_SETDETECTIONINTERVAL,
+ FILEBROWSERPRIVATE_GETFILETASKS,
+ WEBSTOREPRIVATE_GETSTORELOGIN,
+ SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY,
+ IDLTEST_SENDARRAYBUFFERVIEW,
+ SOCKET_SETNODELAY,
+ APP_CURRENTWINDOWINTERNAL_SHOW,
+ WEBSTOREPRIVATE_GETBROWSERLOGIN,
+ EXPERIMENTAL_IDENTITY_GETAUTHTOKEN,
+ DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO,
+ BROWSINGDATA_REMOVEPLUGINDATA,
+ SOCKET_LISTEN,
+ MEDIAGALLERIES_GETMEDIAFILESYSTEMS,
+ DOWNLOADS_OPEN,
+ TABS_EXECUTESCRIPT,
+ SYNCFILESYSTEM_GETUSAGEANDQUOTA,
+ INPUTMETHODPRIVATE_GET,
+ USB_CLOSEDEVICE,
+ TTS_STOP,
+ DELETED_SERIAL_GETPORTS,
+ DELETED_FILEBROWSERPRIVATE_CLEARDRIVECACHE,
+ SERIAL_GETCONTROLSIGNALS,
+ DEVELOPERPRIVATE_ENABLE,
+ FILEBROWSERPRIVATE_GETDRIVEFILEPROPERTIES,
+ USB_FINDDEVICES,
+ BOOKMARKMANAGERPRIVATE_DROP,
+ DELETED_FILEBROWSERPRIVATE_GETFILETRANSFERS,
+ INPUT_IME_SETMENUITEMS,
+ BOOKMARKS_EXPORT,
+ HISTORY_SEARCH,
+ TTSENGINE_SENDTTSEVENT,
+ EXPERIMENTAL_ACCESSIBILITY_GETALERTSFORTAB,
+ BOOKMARKS_IMPORT,
+ SYNCFILESYSTEM_DELETEFILESYSTEM,
+ DEBUGGER_SENDCOMMAND,
+ DEBUGGER_DETACH,
+ METRICSPRIVATE_RECORDSMALLCOUNT,
+ APP_CURRENTWINDOWINTERNAL_MINIMIZE,
+ DEVELOPERPRIVATE_AUTOUPDATE,
+ DNS_RESOLVE,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET,
+ HISTORY_ADDURL,
+ TABS_GET,
+ BROWSERACTION_SETBADGETEXT,
+ TABS_RELOAD,
+ WINDOWS_CREATE,
+ DEVELOPERPRIVATE_LOADUNPACKED,
+ DELETED_DOWNLOADS_SETDESTINATION,
+ DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB,
+ BOOKMARKS_GETCHILDREN,
+ BROWSERACTION_GETTITLE,
+ TERMINALPRIVATE_OPENTERMINALPROCESS,
+ DELETED_SERIAL_CLOSE,
+ CONTEXTMENUS_REMOVE,
+ FILEBROWSERPRIVATE_REQUESTFILESYSTEM,
+ ECHOPRIVATE_GETREGISTRATIONCODE,
+ TABS_GETCURRENT,
+ FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE,
+ MEDIAPLAYERPRIVATE_CLOSEWINDOW,
+ WEBREQUESTINTERNAL_ADDEVENTLISTENER,
+ CLOUDPRINTPRIVATE_GETPRINTERS,
+ STORAGE_SET,
+ FONTSETTINGS_GETDEFAULTFONTSIZE,
+ EXTENSION_SETUPDATEURLDATA,
+ DELETED_SERIAL_WRITE,
+ IDLE_QUERYSTATE,
+ DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ,
+ WEBSTOREPRIVATE_SETSTORELOGIN,
+ PAGEACTIONS_ENABLEFORTAB,
+ COOKIES_SET,
+ CONTENTSETTINGS_SET,
+ CONTEXTMENUS_REMOVEALL,
+ TABS_INSERTCSS,
+ WEBREQUEST_HANDLERBEHAVIORCHANGED,
+ INPUT_IME_SETCURSORPOSITION,
+ OMNIBOX_SENDSUGGESTIONS,
+ SYSTEMINDICATOR_ENABLE,
+ EVENTS_GETRULES,
+ BOOKMARKMANAGERPRIVATE_COPY,
+ SOCKET_RECVFROM,
+ TABS_GETALLINWINDOW,
+ CONTEXTMENUS_UPDATE,
+ BOOKMARKS_SEARCH,
+ EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS,
+ BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA,
+ SYSTEMPRIVATE_GETUPDATESTATUS,
+ FONTSETTINGS_CLEARMINIMUMFONTSIZE,
+ DELETED_FILEBROWSERPRIVATE_GETFILELOCATIONS,
+ EXPERIMENTAL_DISCOVERY_SUGGEST,
+ FILEBROWSERPRIVATE_SETDEFAULTTASK,
+ BROWSERACTION_GETBADGETEXT,
+ APP_CURRENTWINDOWINTERNAL_HIDE,
+ SOCKET_CONNECT,
+ BOOKMARKS_GETSUBTREE,
+ HISTORY_DELETEURL,
+ DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE,
+ BOOKMARKMANAGERPRIVATE_STARTDRAG,
+ BROWSINGDATA_REMOVEPASSWORDS,
+ DOWNLOADS_DRAG,
+ INPUT_IME_SETCOMPOSITION,
+ METRICSPRIVATE_RECORDUSERACTION,
+ USB_RELEASEINTERFACE,
+ PAGEACTION_GETPOPUP,
+ DELETED_SCRIPTBADGE_GETATTENTION,
+ FONTSETTINGS_GETFONTLIST,
+ PERMISSIONS_CONTAINS,
+ DELETED_SCRIPTBADGE_GETPOPUP,
+ EXPERIMENTAL_ACCESSIBILITY_GETFOCUSEDCONTROL,
+ DEVELOPERPRIVATE_GETSTRINGS,
+ METRICSPRIVATE_RECORDMEDIUMCOUNT,
+ MANAGEMENT_GET,
+ PERMISSIONS_GETALL,
+ DOWNLOADS_SHOW,
+ DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE,
+ TABS_REMOVE,
+ MANAGEMENT_GETPERMISSIONWARNINGSBYID,
+ WINDOWS_GET,
+ FILEBROWSERPRIVATE_EXECUTETASK,
+ TTS_GETVOICES,
+ MANAGEMENT_GETALL,
+ MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST,
+ APP_CURRENTWINDOWINTERNAL_CLEARATTENTION,
+ AUTOTESTPRIVATE_SHUTDOWN,
+ FONTSETTINGS_CLEARDEFAULTFONTSIZE,
+ BOOKMARKS_GETTREE,
+ FILEBROWSERPRIVATE_SELECTFILES,
+ RUNTIME_GETBACKGROUNDPAGE,
+ DELETED_EXPERIMENTAL_RECORD_REPLAYURLS,
+ WEBSTOREPRIVATE_COMPLETEINSTALL,
+ DELETED_EXPERIMENTAL_SPEECHINPUT_START,
+ COOKIES_GETALL,
+ DOWNLOADS_GETFILEICON,
+ PAGEACTION_GETTITLE,
+ BROWSINGDATA_REMOVE,
+ DELETED_SERIAL_OPEN,
+ FILESYSTEM_GETDISPLAYPATH,
+ FILEBROWSERPRIVATE_FORMATVOLUME,
+ BOOKMARKS_GET,
+ DELETED_MANAGEDMODEPRIVATE_GET,
+ ALARMS_CLEAR,
+ SYNCFILESYSTEM_GETFILESYNCSTATUS,
+ SOCKET_GETINFO,
+ WEBSTOREPRIVATE_INSTALLBUNDLE,
+ BROWSERACTION_ENABLE,
+ METRICSPRIVATE_RECORDMEDIUMTIME,
+ PAGEACTION_SETTITLE,
+ CLOUDPRINTPRIVATE_GETHOSTNAME,
+ CONTENTSETTINGS_GETRESOURCEIDENTIFIERS,
+ SOCKET_CREATE,
+ DEVELOPERPRIVATE_RELOAD,
+ FILEBROWSERPRIVATE_GETVOLUMEMETADATALIST,
+ APP_RUNTIME_POSTINTENTRESPONSE,
+ DELETED_MANAGEDMODEPRIVATE_SETPOLICY,
+ WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3,
+ WALLPAPERPRIVATE_SETWALLPAPER,
+ USB_CONTROLTRANSFER,
+ DELETED_EXPERIMENTAL_SPEECHINPUT_STOP,
+ USB_BULKTRANSFER,
+ DELETED_FILEBROWSERPRIVATE_GETVOLUMEMETADATA,
+ PAGECAPTURE_SAVEASMHTML,
+ EXTENSION_ISALLOWEDINCOGNITOACCESS,
+ BROWSINGDATA_REMOVEAPPCACHE,
+ APP_CURRENTWINDOWINTERNAL_DRAWATTENTION,
+ METRICSPRIVATE_RECORDCOUNT,
+ USB_INTERRUPTTRANSFER,
+ TYPES_CHROMESETTING_CLEAR,
+ INPUT_IME_COMMITTEXT,
+ IDLTEST_SENDARRAYBUFFER,
+ WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS,
+ SOCKET_ACCEPT,
+ WEBNAVIGATION_GETFRAME,
+ EXPERIMENTAL_POWER_RELEASEKEEPAWAKE,
+ APP_CURRENTWINDOWINTERNAL_SETICON,
+ PUSHMESSAGING_GETCHANNELID,
+ EXPERIMENTAL_INFOBARS_SHOW,
+ INPUT_IME_SETCANDIDATEWINDOWPROPERTIES,
+ METRICSPRIVATE_RECORDPERCENTAGE,
+ TYPES_CHROMESETTING_GET,
+ WINDOWS_GETLASTFOCUSED,
+ DELETED_MANAGEDMODEPRIVATE_GETPOLICY,
+ STORAGE_CLEAR,
+ STORAGE_GETBYTESINUSE,
+ TABS_QUERY,
+ PAGEACTION_SETPOPUP,
+ DEVELOPERPRIVATE_INSPECT,
+ DOWNLOADS_SEARCH,
+ FONTSETTINGS_CLEARFONT,
+ WINDOWS_UPDATE,
+ BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS,
+ SERIAL_FLUSH,
+ BROWSERACTION_SETTITLE,
+ BOOKMARKMANAGERPRIVATE_CANEDIT,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPER,
+ BOOKMARKS_REMOVE,
+ INPUT_IME_SETCANDIDATES,
+ TERMINALPRIVATE_CLOSETERMINALPROCESS,
+ HISTORY_DELETERANGE,
+ IDLTEST_GETARRAYBUFFER,
+ TERMINALPRIVATE_SENDINPUT,
+ TABS_HIGHLIGHT,
+ BLUETOOTH_STARTDISCOVERY,
+ FILEBROWSERPRIVATE_SELECTFILE,
+ WINDOWS_GETCURRENT,
+ DEBUGGER_ATTACH,
+ WALLPAPERPRIVATE_SAVETHUMBNAIL,
+ INPUT_IME_KEYEVENTHANDLED,
+ FONTSETTINGS_SETDEFAULTFONTSIZE,
+ RUNTIME_REQUESTUPDATECHECK,
+ PAGEACTION_SETICON,
+ BROWSERACTION_SETBADGEBACKGROUNDCOLOR,
+ DEVELOPERPRIVATE_GETITEMSINFO,
+ BLUETOOTH_STOPDISCOVERY,
+ COOKIES_REMOVE,
+ DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING,
+ TABCAPTURE_GETCAPTUREDTABS,
+ WINDOWS_REMOVE,
+ WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST,
+ BROWSERACTION_GETBADGEBACKGROUNDCOLOR,
+ PAGEACTIONS_DISABLEFORTAB,
+ DEVELOPERPRIVATE_ALLOWFILEACCESS,
+ FILEBROWSERPRIVATE_REMOVEMOUNT,
+ BLUETOOTH_CONNECT,
+ TABCAPTURE_CAPTURE,
+ NOTIFICATIONS_CREATE,
+ TABS_DUPLICATE,
+ BLUETOOTH_WRITE,
+ PAGEACTION_SHOW,
+ WALLPAPERPRIVATE_GETTHUMBNAIL,
+ DOWNLOADS_PAUSE,
+ PERMISSIONS_REQUEST,
+ TOPSITES_GET,
+ BROWSINGDATA_REMOVEDOWNLOADS,
+ BROWSINGDATA_REMOVELOCALSTORAGE,
+ FILEBROWSERHANDLERINTERNAL_SELECTFILE,
+ INPUT_IME_UPDATEMENUITEMS,
+ FILEBROWSERPRIVATE_GETSTRINGS,
+ CONTENTSETTINGS_GET,
+ FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE,
+ EXPERIMENTAL_APP_NOTIFY,
+ METRICSPRIVATE_RECORDLONGTIME,
+ SOCKET_READ,
+ DELETED_EXPERIMENTAL_PROCESSES_TERMINATE,
+ METRICSPRIVATE_RECORDTIME,
+ BOOKMARKMANAGERPRIVATE_GETSTRINGS,
+ USB_ISOCHRONOUSTRANSFER,
+ PERMISSIONS_REMOVE,
+ MANAGEMENT_UNINSTALL,
+ I18N_GETACCEPTLANGUAGES,
+ MANAGEMENT_LAUNCHAPP,
+ INPUT_IME_CLEARCOMPOSITION,
+ ALARMS_GETALL,
+ DIAL_DISCOVERNOW,
+ TYPES_CHROMESETTING_SET,
+ BROWSERACTION_SETICON,
+ EXPERIMENTAL_ACCESSIBILITY_SETACCESSIBILITYENABLED,
+ DELETED_FILEBROWSERPRIVATE_VIEWFILES,
+ BLUETOOTH_GETSERVICES,
+ TABS_UPDATE,
+ BROWSINGDATA_REMOVEFORMDATA,
+ DELETED_FILEBROWSERPRIVATE_RELOADDRIVE,
+ ALARMS_GET,
+ BROWSINGDATA_REMOVEINDEXEDDB,
+ FILEBROWSERPRIVATE_ADDFILEWATCH,
+ CONTENTSETTINGS_CLEAR,
+ FILEBROWSERPRIVATE_GETPREFERENCES,
+ BOOKMARKMANAGERPRIVATE_PASTE,
+ FILESYSTEM_ISWRITABLEENTRY,
+ USB_SETINTERFACEALTERNATESETTING,
+ FONTSETTINGS_SETMINIMUMFONTSIZE,
+ BROWSERACTION_GETPOPUP,
+ SOCKET_DESTROY,
+ BLUETOOTH_GETDEVICES,
+ ALARMS_CLEARALL,
+ FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE,
+ FILEBROWSERPRIVATE_ZIPSELECTION,
+ SYSTEMINDICATOR_DISABLE,
+ DELETED_SCRIPTBADGE_SETPOPUP,
+ EXTENSION_ISALLOWEDFILESCHEMEACCESS,
+ EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW,
+ FILEBROWSERPRIVATE_GETDRIVECONNECTIONSTATE,
+ TABS_DETECTLANGUAGE,
+ METRICSPRIVATE_RECORDVALUE,
+ BOOKMARKMANAGERPRIVATE_SORTCHILDREN,
+ DELETED_SERIAL_READ,
+ APP_CURRENTWINDOWINTERNAL_MAXIMIZE,
+ EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS,
+ DELETED_MANAGEDMODEPRIVATE_ENTER,
+ DELETED_FILEBROWSERPRIVATE_TRANSFERFILE,
+ BROWSERACTION_SETPOPUP,
+ TABS_GETSELECTED,
+ FONTSETTINGS_GETFONT,
+ BLUETOOTH_READ,
+ WEBREQUESTINTERNAL_EVENTHANDLED,
+ EVENTS_ADDRULES,
+ CONTEXTMENUS_CREATE,
+ MEDIAPLAYERPRIVATE_GETPLAYLIST,
+ DOWNLOADS_ERASE,
+ DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS,
+ TTS_ISSPEAKING,
+ BOOKMARKS_REMOVETREE,
+ FILEBROWSERPRIVATE_SEARCHDRIVE,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET,
+ FILEBROWSERPRIVATE_SETPREFERENCES,
+ FONTSETTINGS_SETFONT,
+ SOCKET_GETNETWORKLIST,
+ BOOKMARKS_MOVE,
+ WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS,
+ STORAGE_REMOVE,
+ AUTOTESTPRIVATE_LOGINSTATUS,
+ TABS_CREATE,
+ FILEBROWSERPRIVATE_CANCELDIALOG,
+ BROWSINGDATA_REMOVECOOKIES,
+ FILESYSTEM_CHOOSEENTRY,
+ MEDIAPLAYERPRIVATE_PLAY,
+ WEBSTOREPRIVATE_GETWEBGLSTATUS,
+ SOCKET_SENDTO,
+ BROWSINGDATA_REMOVEFILESYSTEMS,
+ WALLPAPERPRIVATE_GETSTRINGS,
+ BROWSINGDATA_REMOVECACHE,
+ BOOKMARKMANAGERPRIVATE_RECORDLAUNCH,
+ BROWSERACTION_DISABLE,
+ DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING,
+ APP_WINDOW_CREATE,
+ RUNTIME_RELOAD,
+ EXPERIMENTAL_POWER_REQUESTKEEPAWAKE,
+ SYSTEMINDICATOR_SETICON,
+ FILEBROWSERPRIVATE_ADDMOUNT,
+ APP_CURRENTWINDOWINTERNAL_FOCUS,
+ EVENTS_REMOVERULES,
+ DOWNLOADS_DOWNLOAD,
+ WINDOWS_GETALL,
+ DELETED_FILEBROWSERPRIVATE_TOGGLEFULLSCREEN,
+ APP_CURRENTWINDOWINTERNAL_RESTORE,
+ DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP,
+ PAGEACTION_HIDE,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET,
+ DOWNLOADS_ACCEPTDANGER,
+ DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP,
+ FILEBROWSERPRIVATE_GETSIZESTATS,
+ DOWNLOADS_RESUME,
+ COOKIES_GETALLCOOKIESTORES,
+ MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH,
+ MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH,
+ WEBVIEW_EXECUTESCRIPT,
+ NOTIFICATIONS_UPDATE,
+ NOTIFICATIONS_CLEAR,
+ DELETED_SESSIONRESTORE_GETRECENTLYCLOSED,
+ DELETED_SESSIONRESTORE_RESTORE,
+ MANAGEMENT_UNINSTALLSELF,
+ ECHOPRIVATE_GETOOBETIMESTAMP,
+ FILEBROWSERPRIVATE_VALIDATEPATHNAMELENGTH,
+ BROWSINGDATA_SETTINGS,
+ WEBSTOREPRIVATE_GETISLAUNCHERENABLED,
+ NETWORKINGPRIVATE_GETPROPERTIES,
+ NETWORKINGPRIVATE_GETVISIBLENETWORKS,
+ NETWORKINGPRIVATE_STARTCONNECT,
+ NETWORKINGPRIVATE_STARTDISCONNECT,
+ MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH,
+ MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH,
+ FILEBROWSERPRIVATE_SEARCHDRIVEMETADATA,
+ DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS,
+ DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE,
+ FILEBROWSERPRIVATE_LOGOUTUSERFORREAUTHENTICATION,
+ DEVELOPERPRIVATE_CHOOSEPATH,
+ DEVELOPERPRIVATE_PACKDIRECTORY,
+ NETWORKINGPRIVATE_VERIFYDESTINATION,
+ NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS,
+ NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA,
+ DEVELOPERPRIVATE_RESTART,
+ DEVELOPERPRIVATE_ALLOWINCOGNITO,
+ INPUT_IME_DELETESURROUNDINGTEXT,
+ DELETED_FILEBROWSERPRIVATE_OPENNEWWINDOW,
+ CLOUDPRINTPRIVATE_GETCLIENTID,
+ ECHOPRIVATE_GETUSERCONSENT,
+ SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY,
+ SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY,
+ NETWORKINGPRIVATE_SETPROPERTIES,
+ NETWORKINGPRIVATE_GETSTATE,
+ POWER_REQUESTKEEPAWAKE,
+ POWER_RELEASEKEEPAWAKE,
+ WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT,
+ DOWNLOADSINTERNAL_DETERMINEFILENAME,
+ SYNCFILESYSTEM_GETFILESYNCSTATUSES,
+ MEDIAGALLERIESPRIVATE_GETHANDLERS,
+ WALLPAPERPRIVATE_RESETWALLPAPER,
+ DEVELOPERPRIVATE_PERMISSIONS,
+ WEBSTOREPRIVATE_ENABLEAPPLAUNCHER,
+ APP_CURRENTWINDOWINTERNAL_FULLSCREEN,
+ DEVELOPERPRIVATE_LOADUNPACKEDCROS,
+ NETWORKINGPRIVATE_REQUESTNETWORKSCAN,
+ ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY,
+ ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY,
+ DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS,
+ DEVELOPERPRIVATE_GETPROJECTSINFO,
+ DEVELOPERPRIVATE_LOADPROJECT,
+ COMMANDLINEPRIVATE_HASSWITCH,
+ NETWORKINGPRIVATE_GETMANAGEDPROPERTIES,
+ LOCATION_WATCHLOCATION,
+ LOCATION_CLEARWATCH,
+ BLUETOOTH_ADDPROFILE,
+ BLUETOOTH_REMOVEPROFILE,
+ BLUETOOTH_GETPROFILES,
+ EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN,
+ AUDIO_GETINFO,
+ AUDIO_SETACTIVEDEVICES,
+ AUDIO_SETPROPERTIES,
+ USB_RESETDEVICE,
+ SOCKET_MULTICAST_JOIN_GROUP,
+ SOCKET_MULTICAST_LEAVE_GROUP,
+ SOCKET_MULTICAST_SET_TIME_TO_LIVE,
+ SOCKET_MULTICAST_SET_LOOPBACK_MODE,
+ SOCKET_MULTICAST_GET_JOINED_GROUPS,
+ EXPERIMENTAL_ACCESSIBILITY_SETNATIVEACCESSIBILITYENABLED,
+ RUNTIME_GETPLATFORMINFO,
+ WEBVIEW_INSERTCSS,
+ METRICSPRIVATE_GETISCRASHRECORDINGENABLED,
+ IDENTITYPRIVATE_GETRESOURCES,
+ NOTIFICATIONS_GET_ALL,
+ USB_LISTINTERFACES,
+ FILESYSTEM_RETAINENTRY,
+ FILESYSTEM_ISRESTORABLE,
+ FILESYSTEM_RESTOREENTRY,
+ RUNTIME_SETUNINSTALLURL,
+ INPUTMETHODPRIVATE_STARTIME,
+ MUSICMANAGERPRIVATE_GETDEVICEID,
+ TTS_PAUSE,
+ TTS_RESUME,
+ DELETED_SYSTEMINFO_CPU_GET,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH,
+ DELETED_SYSTEMINFO_MEMORY_GET,
+ ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES,
+ RUNTIME_GETPACKAGEDIRECTORYENTRY,
+ DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES,
+ FEEDBACKPRIVATE_GETUSEREMAIL,
+ FEEDBACKPRIVATE_GETSYSTEMINFORMATION,
+ FEEDBACKPRIVATE_SENDFEEDBACK,
+ VIRTUALKEYBOARDPRIVATE_INSERTTEXT,
+ DIAGNOSTICS_SENDPACKET,
+ METRICSPRIVATE_GETFIELDTRIAL,
+ FILEBROWSERPRIVATE_ZOOM,
+ WEBVIEW_GO,
+ WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION,
+ FILEBROWSERPRIVATE_REQUESTACCESSTOKEN,
+ WEBVIEW_STOP,
+ WEBVIEW_RELOAD,
+ WEBVIEW_TERMINATE,
+ TYPES_PRIVATE_CHROMEDIRECTSETTING_GET,
+ TYPES_PRIVATE_CHROMEDIRECTSETTING_SET,
+ TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR,
+ DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE,
+ SYSTEM_CPU_GETINFO,
+ BOOKMARKMANAGERPRIVATE_REMOVETREES,
+ SYSTEM_DISPLAY_GETINFO,
+ SYSTEM_DISPLAY_SETDISPLAYPROPERTIES,
+ SYSTEM_MEMORY_GETINFO,
+ FILEBROWSERPRIVATE_GETSHAREURL,
+ SYSTEM_STORAGE_GETINFO,
+ SYSTEM_STORAGE_EJECTDEVICE,
+ DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH,
+ DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH,
+ DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES,
+ DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES,
+ DOWNLOADS_REMOVEFILE,
+ DOWNLOADS_SHOWDEFAULTFOLDER,
+ INFOBARS_SHOW,
+ DOWNLOADS_SETSHELFENABLED,
+ IMAGEWRITER_WRITEFROMURL,
+ IMAGEWRITER_WRITEFROMFILE,
+ IMAGEWRITER_CANCELWRITE,
+ IMAGEWRITER_DESTROYPARTITIONS,
+ FEEDBACKPRIVATE_GETSTRINGS,
+ LOGPRIVATE_GETHISTORICAL,
+ VIRTUALKEYBOARDPRIVATE_MOVECURSOR,
+ METRICSPRIVATE_GETVARIATIONPARAMS,
+ WEBVIEW_SETPERMISSION,
+ DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA,
+ APP_CURRENTWINDOWINTERNAL_SETSHAPE,
+ PROCESSES_GETPROCESSINFO,
+ PROCESSES_GETPROCESSIDFORTAB,
+ PROCESSES_TERMINATE,
+ SOCKETS_UDP_CREATE,
+ SOCKETS_UDP_UPDATE,
+ SOCKETS_UDP_BIND,
+ SOCKETS_UDP_SEND,
+ SOCKETS_UDP_CLOSE,
+ SOCKETS_UDP_GETINFO,
+ SOCKETS_UDP_GETSOCKETS,
+ SOCKETS_UDP_JOINGROUP,
+ SOCKETS_UDP_LEAVEGROUP,
+ SOCKETS_UDP_SETMULTICASTTIMETOLIVE,
+ SOCKETS_UDP_SETMULTICASTLOOPBACKMODE,
+ SOCKETS_UDP_GETJOINEDGROUPS,
+ SIGNED_IN_DEVICES_GET,
+ AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG,
+ WEBVIEW_CLEARDATA,
+ SESSIONS_GETRECENTLYCLOSED,
+ SESSIONS_GETDEVICES,
+ SESSIONS_RESTORE,
+ SYNCFILESYSTEM_GETSERVICESTATUS,
+ ECHOPRIVATE_SETOFFERINFO,
+ ECHOPRIVATE_GETOFFERINFO,
+ DEVELOPERPRIVATE_ISPROFILEMANAGED,
+ FILEBROWSERPRIVATE_INSTALLWEBSTOREITEM,
+ FILEBROWSERPRIVATE_STARTCOPY,
+ FILEBROWSERPRIVATE_CANCELCOPY,
+ NETWORKINGPRIVATE_CREATENETWORK,
+ BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE,
+ BRAILLEDISPLAYPRIVATE_WRITEDOTS,
+ USB_GETDEVICES,
+ USB_REQUESTACCESS,
+ USB_OPENDEVICE,
+ ACTIVITYLOGPRIVATE_DELETEDATABASE,
+ ACTIVITYLOGPRIVATE_DELETEURLS,
+ FILEBROWSERPRIVATE_REQUESTWEBSTOREACCESSTOKEN,
+ IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES,
+ WALLPAPER_SETWALLPAPER,
+ VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD,
+ AUTOTESTPRIVATE_LOCKSCREEN,
+ WEBRTCLOGGINGPRIVATE_SETMETADATA,
+ WEBRTCLOGGINGPRIVATE_START,
+ WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE,
+ WEBRTCLOGGINGPRIVATE_STOP,
+ WEBRTCLOGGINGPRIVATE_UPLOAD,
+ WEBRTCLOGGINGPRIVATE_DISCARD,
+ WEBVIEW_OVERRIDEUSERAGENT,
+ PRINCIPALSPRIVATE_SHOWAVATARBUBBLE,
+ PRINCIPALSPRIVATE_SIGNOUT,
+ CAST_CHANNEL_OPEN,
+ CAST_CHANNEL_SEND,
+ CAST_CHANNEL_CLOSE,
+ RUNTIME_RESTART,
+ DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA,
+ APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP,
+ SOCKETS_TCP_CREATE,
+ SOCKETS_TCP_UPDATE,
+ SOCKETS_TCP_SETPAUSED,
+ SOCKETS_TCP_SETKEEPALIVE,
+ SOCKETS_TCP_SETNODELAY,
+ SOCKETS_TCP_CONNECT,
+ SOCKETS_TCP_DISCONNECT,
+ SOCKETS_TCP_SEND,
+ SOCKETS_TCP_CLOSE,
+ SOCKETS_TCP_GETINFO,
+ SOCKETS_TCP_GETSOCKETS,
+ NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES,
+ NETWORKINGPRIVATE_ENABLENETWORKTYPE,
+ NETWORKINGPRIVATE_DISABLENETWORKTYPE,
+ SOCKETS_TCP_SERVER_CREATE,
+ SOCKETS_TCP_SERVER_UPDATE,
+ SOCKETS_TCP_SERVER_SETPAUSED,
+ SOCKETS_TCP_SERVER_LISTEN,
+ SOCKETS_TCP_SERVER_DISCONNECT,
+ SOCKETS_TCP_SERVER_CLOSE,
+ SOCKETS_TCP_SERVER_GETINFO,
+ SOCKETS_TCP_SERVER_GETSOCKETS,
+ SYSTEM_STORAGE_GETAVAILABLECAPACITY,
+ BROWSERACTION_OPEN_POPUP,
+ WEBRTC_AUDIO_PRIVATE_GET_SINKS,
+ WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK,
+ WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK,
+ WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK,
+ VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED,
+ APP_CURRENTWINDOWINTERNAL_SETMINWIDTH,
+ APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT,
+ APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH,
+ APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT,
+ SYSTEMPRIVATE_GETAPIKEY,
+ CHROMEOSINFOPRIVATE_SET,
+ BOOKMARKMANAGERPRIVATE_GETMETAINFO,
+ BOOKMARKMANAGERPRIVATE_SETMETAINFO,
+ FILESYSTEMPROVIDER_MOUNT,
+ AUTOTESTPRIVATE_GETEXTENSIONSINFO,
+ SCREENLOCKPRIVATE_GETLOCKED,
+ SCREENLOCKPRIVATE_SETLOCKED,
+ SCREENLOCKPRIVATE_SHOWMESSAGE,
+ FEEDBACKPRIVATE_GETHISTOGRAMS,
+ SYSTEM_NETWORK_GETNETWORKINTERFACES,
+ SERIAL_GETDEVICES,
+ SERIAL_UPDATE,
+ SERIAL_SETPAUSED,
+ SERIAL_GETINFO,
+ SERIAL_GETCONNECTIONS,
+ SERIAL_SEND,
+ GCM_REGISTER,
+ GCM_SEND,
+ SERIAL_CONNECT,
+ SERIAL_DISCONNECT,
+ MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA,
+ FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS,
+ FIRSTRUNPRIVATE_LAUNCHTUTORIAL,
+ SOCKETS_UDP_SETPAUSED,
+ WEBVIEW_CAPTUREVISIBLEREGION,
+ MEDIAGALLERIES_GETMETADATA,
+ INPUT_IME_SENDKEYEVENTS,
+ VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD,
+ SCREENLOCKPRIVATE_SHOWBUTTON,
+ INPUT_IME_HIDEINPUTVIEW,
+ BOOKMARKMANAGERPRIVATE_UNDO,
+ BOOKMARKMANAGERPRIVATE_REDO,
+ BOOKMARKMANAGERPRIVATE_UNDOINFO,
+ BOOKMARKMANAGERPRIVATE_REDOINFO,
+ MEDIAGALLERIES_ADDUSERSELECTEDFOLDER,
+ PREFERENCESPRIVATE_GETSYNCCATEGORIESWITHOUTPASSPHRASE,
+ READINGLISTPRIVATE_ADDENTRY,
+ READINGLISTPRIVATE_REMOVEENTRY,
+ READINGLISTPRIVATE_GETENTRIES,
+ MEDIAGALLERIES_STARTMEDIASCAN,
+ MEDIAGALLERIES_CANCELMEDIASCAN,
+ MEDIAGALLERIES_ADDSCANRESULTS,
+ LOGPRIVATE_STARTNETINTERNALSWATCH,
+ LOGPRIVATE_STOPNETINTERNALSWATCH,
+ FILEBROWSERPRIVATE_GETPROFILES,
+ FILEBROWSERPRIVATE_VISITDESKTOP,
+ VIRTUALKEYBOARDPRIVATE_GETKEYBOARDCONFIG,
+ HID_GETDEVICES,
+ HID_CONNECT,
+ HID_DISCONNECT,
+ HID_RECEIVE,
+ HID_SEND,
+ HID_RECEIVEFEATUREREPORT,
+ HID_SENDFEATUREREPORT,
+ HOTWORDPRIVATE_SETENABLED,
+ HOTWORDPRIVATE_GETSTATUS,
+ APP_CURRENTWINDOWINTERNAL_SETBADGEICON,
+ APP_CURRENTWINDOWINTERNAL_CLEARBADGE,
+ WEBVIEW_SETZOOM,
+ WEBVIEW_GETZOOM,
+ DEVELOPERPRIVATE_REQUESTFILESOURCE,
+ DEVELOPERPRIVATE_OPENDEVTOOLS,
+ ACTIVITYLOGPRIVATE_DELETEACTIVITIES,
+ NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE,
+ NETWORKINGPRIVATE_GETWIFITDLSSTATUS,
+ SCREENLOCKPRIVATE_HIDEBUTTON,
+ SCREENLOCKPRIVATE_SETAUTHTYPE,
+ SCREENLOCKPRIVATE_GETAUTHTYPE,
+ SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT,
+ WEBVIEW_FIND,
+ WEBVIEW_STOPFINDING,
+ WEBVIEW_CONTEXTMENUSCREATE,
+ WEBVIEW_CONTEXTMENUSUPDATE,
+ WEBVIEW_CONTEXTMENUSREMOVE,
+ WEBVIEW_CONTEXTMENUSREMOVEALL,
+ // Last entry: Add new entries above and ensure to update
+ // tools/metrics/histograms/histograms/histograms.xml.
+ ENUM_BOUNDARY
+};
+
+} // namespace functions
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_