Merge branch 'main' into avm99963-monorail

Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266

GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/tracker/componentdetail.py b/tracker/componentdetail.py
index 01f2469..177e548 100644
--- a/tracker/componentdetail.py
+++ b/tracker/componentdetail.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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 or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """A servlet for project and component owners to view and edit components."""
 from __future__ import print_function
@@ -20,6 +19,7 @@
 from framework import servlet
 from framework import timestr
 from framework import urls
+from gae_ts_mon import flask_handlers
 from tracker import component_helpers
 from tracker import tracker_bizobj
 from tracker import tracker_constants
@@ -86,7 +86,7 @@
         mr, component_def.modifier_id, component_def.modified)
 
     allow_edit = permissions.CanEditComponentDef(
-        mr.auth.effective_ids, mr.perms, mr.project, component_def, config)
+        mr, self.services, component_def, config)
 
     subcomponents = tracker_bizobj.FindDescendantComponents(
         config, component_def)
@@ -111,7 +111,7 @@
         'created': created,
         'modifier': modifier,
         'modified': modified,
-        }
+    }
 
   def ProcessFormData(self, mr, post_data):
     """Validate and store the contents of the issues tracker admin page.
@@ -125,7 +125,7 @@
     """
     config, component_def = self._GetComponentDef(mr)
     allow_edit = permissions.CanEditComponentDef(
-        mr.auth.effective_ids, mr.perms, mr.project, component_def, config)
+        mr, self.services, component_def, config)
     if not allow_edit:
       raise permissions.PermissionException(
           'User is not allowed to edit or delete this component')
@@ -244,3 +244,9 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, urls.COMPONENT_DETAIL,
         component=new_path, saved=1, ts=int(time.time()))
+
+  def GetComponentDetailPage(self, **kwargs):
+    return self.handler(**kwargs)
+
+  def PostComponentDetailPage(self, **kwargs):
+    return self.handler(**kwargs)