static JSStringRef indexRangeInTable(PlatformUIElement element, bool isRowRange) { GOwnPtr<gchar> rangeString(g_strdup("{0, 0}")); if (!element) return JSStringCreateWithUTF8CString(rangeString.get()); ASSERT(ATK_IS_OBJECT(element)); AtkObject* axTable = atk_object_get_parent(ATK_OBJECT(element)); if (!axTable || !ATK_IS_TABLE(axTable)) return JSStringCreateWithUTF8CString(rangeString.get()); // Look for the cell in the table. gint indexInParent = atk_object_get_index_in_parent(ATK_OBJECT(element)); if (indexInParent == -1) return JSStringCreateWithUTF8CString(rangeString.get()); int row = -1; int column = -1; row = atk_table_get_row_at_index(ATK_TABLE(axTable), indexInParent); column = atk_table_get_column_at_index(ATK_TABLE(axTable), indexInParent); // Get the actual values, if row and columns are valid values. if (row != -1 && column != -1) { int base = 0; int length = 0; if (isRowRange) { base = row; length = atk_table_get_row_extent_at(ATK_TABLE(axTable), row, column); } else { base = column; length = atk_table_get_column_extent_at(ATK_TABLE(axTable), row, column); } rangeString.set(g_strdup_printf("{%d, %d}", base, length)); } return JSStringCreateWithUTF8CString(rangeString.get()); }
void ChannelMediaResource::SetupChannelHeaders() { // Always use a byte range request even if we're reading from the start // of the resource. // This enables us to detect if the stream supports byte range // requests, and therefore seeking, early. nsCOMPtr<nsIHttpChannel> hc = do_QueryInterface(mChannel); if (hc) { // Use |mByteRange| for a specific chunk, or |mOffset| if seeking in a // complete file download. nsAutoCString rangeString("bytes="); if (!mByteRange.IsNull()) { rangeString.AppendInt(mByteRange.mStart); mOffset = mByteRange.mStart; } else { rangeString.AppendInt(mOffset); } rangeString.Append("-"); if (!mByteRange.IsNull()) { rangeString.AppendInt(mByteRange.mEnd); } hc->SetRequestHeader(NS_LITERAL_CSTRING("Range"), rangeString, false); // Send Accept header for video and audio types only (Bug 489071) NS_ASSERTION(NS_IsMainThread(), "Don't call on non-main thread"); MediaDecoderOwner* owner = mDecoder->GetMediaOwner(); if (!owner) { return; } dom::HTMLMediaElement* element = owner->GetMediaElement(); if (!element) { return; } element->SetRequestHeaders(hc); } else { NS_ASSERTION(mOffset == 0, "Don't know how to seek on this channel type"); } }