title: Why is my packaged chrome extension not updating?
body: <p><strong>UPDATE: Solved one part, but not other</strong></p>
  
  <ol>
  <li><p>I have the CRX updating now (it was not rebuilding).</p></li>
  <li><p><strong>However</strong>, Chrome will not accept the XML or CRX at an https URL.</p></li>
  </ol>
  
  <p>I believe #2 is because it's a self-signed certificate. Does anyone know if there's a way around this? (This is purely for development, so hosted internally)</p>
  
  <p><strong>ORIGINAL POST:</strong></p>
  
  <p>I created a packaged extension that is hosted on my internal website, but is added to Chrome via dragging it from the desktop (because Chrome won't allow installing packaged extensions via external websites - see here: <a href="https://stackoverflow.com/questions/16489013/after-adding-extensioninstallsources-preference-with-my-url-to-chrome-preference">After adding ExtensionInstallSources preference with my URL to Chrome Preferences, still won&#39;t allow installing &quot;.crx&quot; packaged app</a> ). </p>
  
  <p>The manifest has the <code>update_url</code> set to an XML file located on my site. That XML file has the url for the crx file set under <code>updatecheck codebase='...'</code>. Both files exist on the website and are findable. I also upated the version number from <code>2.0.0.2</code> to <code>2.0.0.2</code> in both the XML file and the <code>manifest.json</code>. I also made a change in the index.html file of the extension.</p>
  
  <p>I checked the <code>appid</code> and it is the same in the XML file and in Chrome.</p>
  
  <p>Despite clicking the "update extensions now" button about 50 times, and waiting 10 minutes, it does not update.</p>
  
  <p><em>NOTE: I did alias the internal ip 192.168.1.108 where the site is hosted in my hosts file as <code>myinternal.fake</code> but this works in both chrome and firefox so I don't think that's the issue</em></p>
  
  <p><strong>Update XML File (located at: <a href="https://myinternal.fake/updates/helloworld.xml" rel="nofollow noreferrer">https://myinternal.fake/updates/helloworld.xml</a>)</strong></p>
  
  <pre><code>&lt;?xml version='1.0' encoding='UTF-8'?&gt;
  &lt;gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'&gt;
      &lt;app appid='akchdaojnpiglpjeiamjpacbkppcgbgj'&gt;
          &lt;updatecheck codebase='https://myinternal.fake/helloworld.crx' version='2.0.0.2' prodversionmin='23' /&gt;
      &lt;/app&gt;
  &lt;/gupdate&gt;
  </code></pre>
  
  <p><strong>manifest.json</strong></p>
  
  <pre><code>{
      "manifest_version": 2,
      "name": "Hello World",
      "version": "2.0.0.2",
      "minimum_chrome_version": "23",
      "update_url": "https://myinternal.fake/updates/helloworld.xml",
      "icons": 
      {
          "16": "icon_16.png",
          "128": "icon_128.png"
      },
      "app": 
      {
          "background": 
          {
              "scripts": 
              [
                  "main.js"
              ]
          }
      }
  }
  </code></pre>
  
  <p>EDIT: I also checked and the header is an acceptable one for Chrome (according to this: <a href="http://developer.chrome.com/dev/extensions/hosting.html" rel="nofollow noreferrer">http://developer.chrome.com/dev/extensions/hosting.html</a>). It sends the CRX file as "text/plain" and does NOT send the header <code>X-Content-Type-Options: nosniff</code> so it should be valid.</p>
  
  <p>Also, when I changed from <code>https</code> to <code>http</code>, now when I click "update extensions now" the extension disappears for a split second which indicates it's now reading the XML, but still not accepting the update!</p>