diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 3c62eb2..c593b16 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -223,11 +223,7 @@
       line_number += 1
 
   if problems:
-    if not input_api.is_committing:
-      return [output_api.PresubmitPromptWarning(_TEST_ONLY_WARNING, problems)]
-    else:
-      # We don't warn on commit, to avoid stopping commits going through CQ.
-      return [output_api.PresubmitNotifyResult(_TEST_ONLY_WARNING, problems)]
+    return [output_api.PresubmitPromptOrNotify(_TEST_ONLY_WARNING, problems)]
   else:
     return []
 
@@ -440,13 +436,7 @@
         'You added one or more #includes that violate checkdeps rules.',
         error_descriptions))
   if warning_descriptions:
-    if not input_api.is_committing:
-      warning_factory = output_api.PresubmitPromptWarning
-    else:
-      # We don't want to block use of the CQ when there is a warning
-      # of this kind, so we only show a message when committing.
-      warning_factory = output_api.PresubmitNotifyResult
-    results.append(warning_factory(
+    results.append(output_api.PresubmitPromptOrNotify(
         'You added one or more #includes of files that are temporarily\n'
         'allowed but being removed. Can you avoid introducing the\n'
         '#include? See relevant DEPS file(s) for details and contacts.',
@@ -623,12 +613,7 @@
 
   results = []
   if warnings:
-    if not input_api.is_committing:
-      results.append(output_api.PresubmitPromptWarning(_INCLUDE_ORDER_WARNING,
-                                                       warnings))
-    else:
-      # We don't warn on commit, to avoid stopping commits going through CQ.
-      results.append(output_api.PresubmitNotifyResult(_INCLUDE_ORDER_WARNING,
+    results.append(output_api.PresubmitPromptOrNotify(_INCLUDE_ORDER_WARNING,
                                                       warnings))
   return results
 
@@ -677,13 +662,7 @@
         problems.append((f.LocalPath(), line_num, line))
 
   if problems:
-    if not input_api.is_committing:
-      warning_factory = output_api.PresubmitPromptWarning
-    else:
-      # We don't want to block use of the CQ when there is a warning
-      # of this kind, so we only show a message when committing.
-      warning_factory = output_api.PresubmitNotifyResult
-    return [warning_factory(
+    return [output_api.PresubmitPromptOrNotify(
         'Most layers below src/chrome/ should not hardcode service URLs.\n'
         'Are you sure this is correct? (Contact: joi@chromium.org)',
         ['  %s:%d:  %s' % (
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py
index 8c4b3ff..ed7e190 100755
--- a/PRESUBMIT_test.py
+++ b/PRESUBMIT_test.py
@@ -43,6 +43,11 @@
       MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
       self.type = 'notify'
 
+  class PresubmitPromptOrNotify(PresubmitResult):
+    def __init__(self, message, items, long_text=''):
+      MockOutputApi.PresubmitResult.__init__(self, message, items, long_text)
+      self.type = 'promptOrNotify'
+
 
 class MockFile(object):
   def __init__(self, local_path, new_contents):
@@ -246,19 +251,7 @@
     warnings = PRESUBMIT._CheckIncludeOrder(mock_input_api, mock_output_api)
     self.assertEqual(1, len(warnings))
     self.assertEqual(2, len(warnings[0].items))
-    self.assertEqual('warning', warnings[0].type)
-
-  def testOnlyNotifyOnCommit(self):
-    mock_input_api = MockInputApi()
-    mock_input_api.is_committing = True
-    mock_output_api = MockOutputApi()
-    contents = ['#include <b.h>',
-                '#include <a.h>']
-    mock_input_api.files = [MockFile('something.cc', contents)]
-    warnings = PRESUBMIT._CheckIncludeOrder(mock_input_api, mock_output_api)
-    self.assertEqual(1, len(warnings))
-    self.assertEqual(1, len(warnings[0].items))
-    self.assertEqual('notify', warnings[0].type)
+    self.assertEqual('promptOrNotify', warnings[0].type)
 
   def testUncheckableIncludes(self):
     mock_input_api = MockInputApi()
diff --git a/ppapi/PRESUBMIT.py b/ppapi/PRESUBMIT.py
index 9b6f716..1a95003 100644
--- a/ppapi/PRESUBMIT.py
+++ b/ppapi/PRESUBMIT.py
@@ -175,7 +175,7 @@
         for line in lines:
           if line[2].split()[:2] == ['#define', 'PPAPI_RELEASE']:
             results.append(
-                output_api.PresubmitNotifyResult(
+                output_api.PresubmitPromptOrNotify(
                     'PPAPI_RELEASE has changed', long_text=line[2]))
             releaseChanged = True
             break
