<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:mcatanzaro&#64;igalia.com" title="Michael Catanzaro &lt;mcatanzaro&#64;igalia.com&gt;"> <span class="fn">Michael Catanzaro</span></a>
</span> changed
              <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [GTK] Add API to WebKitWebsiteDataManager to handle cached data"
   href="https://bugs.webkit.org/show_bug.cgi?id=146589">bug 146589</a>
        <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">CC</td>
           <td>
               &nbsp;
           </td>
           <td>mcatanzaro&#64;igalia.com
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [GTK] Add API to WebKitWebsiteDataManager to handle cached data"
   href="https://bugs.webkit.org/show_bug.cgi?id=146589#c9">Comment # 9</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [GTK] Add API to WebKitWebsiteDataManager to handle cached data"
   href="https://bugs.webkit.org/show_bug.cgi?id=146589">bug 146589</a>
              from <span class="vcard"><a class="email" href="mailto:mcatanzaro&#64;igalia.com" title="Michael Catanzaro &lt;mcatanzaro&#64;igalia.com&gt;"> <span class="fn">Michael Catanzaro</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=146589#c7">comment #7</a>)
<span class="quote">&gt; 
&gt; This is a common thing we do in the API just to make it more convenient to
&gt; use. The host and protocol are stored in WebCore::SecurityOrigin as String,
&gt; but all our APIs return always string in utf8 (like all other GNOME platform
&gt; APIs). If we return the converted string directly, the returned value should
&gt; be freed by the user. So, we cache the converted strings to be able to
&gt; return a const char *, and we do that only on demand, so if you never call
&gt; get_host we don't have a cached value for nothing.</span >

Surely if we were to take a String s and return s.utf8().data(), that does not need to be freed by the caller. It is a pointer to the CString's internal CStringBuffer. And the CString has a reference-counted CStringBuffer, so the data should be freed automatically when... er, when the function returns. Ah, OK, so that would be bad. WebKit's strings are confusing; I wish it hadn't taken a year for me to realize this.

<span class="quote">&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:77
&gt; &gt; &gt; +    ASSERT(origin);
&gt; &gt; 
&gt; &gt; When you would write an assertion like this, I think it's better to pass by
&gt; &gt; reference instead. I think we've been trying to avoid pass by pointer except
&gt; &gt; in C API and when the pointer is expected to be null.
&gt; 
&gt; WebKitSecurityOrigin is a boxed type not a C++ class, we always use pointers
&gt; with GObjects or boxed types.</span >

I am not sure why, though. I think it would still work fine if we were to do pass by reference.

<span class="quote">&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitSecurityOrigin.cpp:166
&gt; I thought nullable/allow-none was assumed for char *, I think we don't use
&gt; that in any of our APIs, we will have to update them all.</span >

I think that is wrong, unfortunately. I found [1] which says:

gchar* means (type utf8) (transfer full)
const gchar* means (type utf8) (transfer none)

Where (nullable) is conspicuously missing. And it includes this example:

/**
 * gtk_link_button_new_with_label: 
 * &#64;uri: A URI
 * &#64;label: (nullable): A piece of text or NULL
 */
GtkWidget *
gtk_link_button_new_with_label (const gchar *uri,
                                const gchar *label);

So I think we've been doing it wrong.

Looking at [1], it does look like no annotations are needed for GError, so you're right about that. I was looking at some Gio code that used (out), but I guess it was redundant.

[1] <a href="https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations">https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations</a></pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>