Show UI only if code-owners functionality disabled for a project

Change-Id: I347ac111f6658b1aa75b544c57a06df9c271b9b3
diff --git a/src/main/resources/static/find-owners.js b/src/main/resources/static/find-owners.js
index d2c0c97..dc6c221 100644
--- a/src/main/resources/static/find-owners.js
+++ b/src/main/resources/static/find-owners.js
@@ -37,6 +37,33 @@
   function hideFindOwnersPage() {
     pageDiv.style.visibility = 'hidden';
   }
+
+  // Temporary functions - checks if code owners are enabled for a change
+  function getIsCodeOwnerPluginEnabledForChange(change) {
+    const codeOwners = window.__gerrit_code_owners_plugin;
+    if (!codeOwners) {
+      // Code-owners plugin is not installed
+      return Promise.resolve(false);
+    }
+    return new Promise(resolve => {
+
+      const stateChangedListener = () => {
+        if (codeOwners.state.change?.id === change.id) {
+          // The code-owners plugin might have a delay with updating its
+          // state. Ensure that it contains state for the requested change.
+          codeOwners.stateChanged.removeEventListener('state-changed',
+              stateChangedListener);
+          return void resolve(codeOwners.state.branchState !== 'DISABLED');
+        }
+      }
+      codeOwners.stateChanged.addEventListener('state-changed',
+          stateChangedListener);
+      // If state has been already updated, the 'state-changed' event is not
+      // fired. Call stateChangedListener to check curent state.
+      stateChangedListener();
+    });
+  }
+
   function popupFindOwnersPage(context, change, revision, onSubmit) {
     const PADDING = 5;
     const LARGE_PAGE_STYLE = Gerrit.css(
@@ -633,17 +660,53 @@
 
     callServer(showFindOwnersResults);
   }
+  // Stores information about the last change passed to onShowChangePolyGerrit
+  let lastChangeInfo = null;
   function onSubmit(change, revision) {
+    // onShowChangePolyGerrit is always called after all plugins are loaded.
+    // However, onSubmit can be called earlier (thought it is unlikely) and
+    // lastChangeInfo can be null.
+    if(lastChangeInfo && lastChangeInfo.ownerPlugin === 'code-owners') {
+      return true;
+    }
     const OWNER_REVIEW_LABEL = 'Owner-Review-Vote';
     if (change.labels.hasOwnProperty(OWNER_REVIEW_LABEL)) {
-      // Pop up Find Owners page; do not submit.
-      popupFindOwnersPage(null, change, revision, true);
+      if(lastChangeInfo && lastChangeInfo.ownerPlugin === 'find-owners') {
+        popupFindOwnersPage(null, change, revision, true);
+      } else {
+        // Usually, the api returns required config very fast, so this is
+        // a very rare when user will see this message.
+        document.dispatchEvent(
+            new CustomEvent('show-error', {
+              detail: {
+                message:
+                  'Some requests to code-owners are still in progress, ' +
+                  'please try to submit again in a few seconds.\n' +
+                  'The host has both find-owners and code-owners plugin enabled.' +
+                  'The Submit is not possible until requests are completed. ',
+                composed: true,
+                bubbles: true,
+              }
+            }
+          )
+        );
+      }
       return false;
     }
     return true;  // Okay to submit.
   }
   var actionKey = null;
   function onShowChangePolyGerrit(change, revision) {
+    if (lastChangeInfo) {
+      // If previous request was too slow, user can have enough time for
+      // switching to another view. Cancel previos request.
+      lastChangeInfo.cancelled = true;
+    }
+    const changeInfo = {
+      change,
+      cancelled: false,
+    }
+    lastChangeInfo = changeInfo;
     var changeActions = self.changeActions();
     // Hide previous 'Find Owners' button under 'MORE'.
     changeActions.setActionHidden('revision', 'find-owners~find-owners', true);
@@ -651,13 +714,19 @@
       changeActions.removeTapListener(actionKey);
       changeActions.remove(actionKey);
     }
-    actionKey = changeActions.add('revision', '[FIND OWNERS]');
-    changeActions.setIcon(actionKey, 'robot');
-    changeActions.setTitle(actionKey, 'Find owners of changed files');
-    changeActions.addTapListener(actionKey, (e) => {
-      if (e) e.stopPropagation();
+    getIsCodeOwnerPluginEnabledForChange(change).then((codeOwnersEnabled) => {
+      changeInfo.ownerPlugin = codeOwnersEnabled ? 'code-owners' : 'find-owners';
+      if (changeInfo.cancelled || changeInfo.ownerPlugin === 'code-owners') {
+        return;
+      }
+      actionKey = changeActions.add('revision', '[FIND OWNERS]');
+      changeActions.setIcon(actionKey, 'robot');
+      changeActions.setTitle(actionKey, 'Find owners of changed files');
+      changeActions.addTapListener(actionKey, (e) => {
+        if (e) e.stopPropagation();
 
-      popupFindOwnersPage(null, change, revision, false);
+        popupFindOwnersPage(null, change, revision, false);
+      });
     });
   }
   function onClick(event) {